基本的な言語機能の理解を確認するために、3次元ベクトルクラスをつくってみる。課題は以下:
- メンバ変数の型はあとから簡単に変えられるようにしておく
- getter, setterを持ち、クラス外部からアクセスできる
- コンソールから値をセットできるようにする
- 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);
}
コンソールからの入力部分は削除。