前回の記事(C++でクラスを作る)を例に、C++で関数にクラスを渡す方法を考える。
今、fruitsクラスがあるとすると、fruitsはintやdoubleと同様に扱えるので
void hoge(fruits, float, float, float);
として関数を宣言すればいい。こうすればクラスfruitsをhogeに渡すことができる。
実行結果
name->apple
mass->10
x->1
y->2
z->3
name->apple
mass->10
x->2
y->3
z->4
実行結果から分かるように、クラスappleと引数に渡した後のクラスmyfruitsは別物のため値は共有されない。もし、クラスappleにhogeでの変更内容を反映させたいのであれば
fruits hoge(fruits, float, float, float);
fruits hoge(fruits myfruits, float x, float y, float z) {
myfruits.move(x, y, z);
myfruits.view();
return myfruits;
}
などとして、値を返してしまえばいい。以下ソース。
#include <iostream>
#define const_gravity 9.80665
class fruits {
private:
std::string name = "";
float mass = 0.0;
float x = 0.0;
float y = 0.0;
float z = 0.0;
public:
void set(std::string name_set, float mass_set, float x_set, float y_set, float z_set) {
name = name_set;
mass = mass_set;
x = x_set;
y = y_set;
z = z_set;
}
void weight(void) {
std::cout << mass * const_gravity << std::endl;
}
void move(float x_move, float y_move, float z_move) {
x = x_move;
y = y_move;
z = z_move;
}
void view() {
std::cout << "name->" << name << std::endl;
std::cout << "mass->" << mass << std::endl;
std::cout << "x->" << x << std::endl;
std::cout << "y->" << y << std::endl;
std::cout << "z->" << z << std::endl;
}
};
void hoge(fruits, float, float, float);
int main()
{
fruits apple;
apple.set("apple", 10, 2, 3, 4);
hoge(apple,1, 2, 3);
apple.view();
}
void hoge(fruits myfruits,float x, float y, float z) {
myfruits.move(x, y, z);
myfruits.view();
}
コメント