LoginSignup
1
1

More than 3 years have passed since last update.

3次元ベクトルクラスを作る

Posted at

基本的な言語機能の理解を確認するために、3次元ベクトルクラスをつくってみる。課題は以下:
1. メンバ変数の型はあとから簡単に変えられるようにしておく
2. getter, setterを持ち、クラス外部からアクセスできる
3. コンソールから値をセットできるようにする
4. 3つの数を受け取ってベクトルを返すように変更する。また、x,y,zをデフォルト0で初期化する

x,y,zを持つクラスv3d

あとでx,y,zの方を変更することも考慮して、別名ele_typeを定義

Step1
class v3d
{
public:
    using ele_type = int;//あとで変更を考慮

private:
    ele_type x;
    ele_type y;
    ele_type z;
};

getter, setter部分

最初はgetter,setterをそれぞれ1つだけで書こうと思ってたが、、、まずはそれぞれの要素x,y,zにgetter,setter設ける。

Step2

class v3d
{
public:
    using ele_type = int;//とりあえずint

private:
    ele_type x;
    ele_type y;
    ele_type z;
public://ここ忘れててprivateになってしまっていたので注意
    ele_type getter_x();
    void setter_x(ele_type X);
    ele_type getter_y();
    void setter_y(ele_type Y);
    ele_type getter_z();
    void setter_z(ele_type Z);
};
v3d::ele_type v3d::getter_x() {
    return x;
}
void v3d::setter_x(ele_type X) {
    x = X;
}
v3d::ele_type v3d::getter_y() {
    return y;
}
void v3d::setter_y(ele_type Y) {
    y = Y;
}
v3d::ele_type v3d::getter_z() {
    return z;
}
void v3d::setter_z(ele_type Z) {
    z = Z;
}

main部分

v3dクラス変数vを作成し、x,y,zを設定する。コンソールから値を設定できるようにした。以下はmain部分

Step4

int main()
{
    int x, y, z = 0;
    std::cout << "xの値を入力してください :";
    std::cin >> x;
    std::cout << "yの値を入力してください :";
    std::cin >> y;
    std::cout << "zの値を入力してください :";
    std::cin >> z;

    v3d v;
    v.setter_x(x);
    v.setter_y(y);
    v.setter_z(z);
}

なんだかx,y,zについて、一つ一つ値をsetするのはあんまり気持ちよくない。なのでせめてsetをひとまとめにする。

setterをまとめる+デフォルト値0を設定する

以下、追加した関数

Step5
v3d set(v3d::ele_type x = 0, v3d::ele_type y = 0, v3d::ele_type z = 0) {
    v3d v;
    v.setter_x(x);
    v.setter_y(y);
    v.setter_z(z);
}

main側ではv3d型変数を作成して、引数を入れたsetを書く。
結局x,y,zそれぞれのsetter部はそのままで、それをまとめて尻拭いしているだけのsetになってしまっているので、1つのsetにすべて押し込む形にする。そしてできたのが以下

Whole
#include <iostream>

class v3d
{
public:
    using ele_type = int;

private:
    ele_type x;
    ele_type y;
    ele_type z;

public:
    ele_type getter_x();
//  void setter_x(ele_type X);
    ele_type getter_y();
//  void setter_y(ele_type Y);
    ele_type getter_z();
//  void setter_z(ele_type Z);

    void set(ele_type X, ele_type Y, ele_type Z);
};
v3d::ele_type v3d::getter_x() {
    return x;
}
/*
void v3d::setter_x(ele_type X) {
    x = X;
}
*/
v3d::ele_type v3d::getter_y() {
    return y;
}
/*
void v3d::setter_y(ele_type Y) {
    y = Y;
}
*/
v3d::ele_type v3d::getter_z() {
    return z;
}
/*
void v3d::setter_z(ele_type Z) {
    z = Z;
}
*/

void v3d::set(v3d::ele_type X = 0, v3d::ele_type Y = 0, v3d::ele_type Z = 0) {
    x = X;
    y = Y;
    z = Z;
}

int main()
{
    v3d vec;
    vec.set(1, 2, 3);
}

コンソールからの入力部分は削除。

1
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1