C++で関数にクラスを渡す

前回の記事(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();
}

コメント

タイトルとURLをコピーしました