- 関数に引数としてデータを渡すのと同じように、オブジェクトを渡すこともできる。
study86.cpp
#include <iostream>
using namespace std;
class samp {
int i;
public:
samp( int n ) {
i = n;
}
void set_i( int n ) {
i = n;
}
int get_i() {
return i;
}
};
void sqr_it( samp o ) {
o.set_i( o.get_i() * o.get_i() );
cout << "iのコピーの値は " << o.get_i() << "\n";
}
int main() {
samp a(10);
sqr_it(a);
cout << "しかし、a.iはmain()で変更されない:" << a.get_i() << "\n";
return 0;
}
$ ./study86
iのコピーの値は 100
しかし、a.iはmain()で変更されない:10
- デフォルトでは 値呼び出し で関数に渡される
- 引数がビット単位でコピーされ、関数ではこのコピーが使われる
- 関数の内部でオブジェクトに変更を加えても、呼び出し側のオブジェクトには影響がない
- コピーが使われるということは、sqr_it()関数終了時にデストラクタが呼び出される。
study87.cpp
#include <iostream>
using namespace std;
class samp {
int i;
public:
samp( int n ) {
i = n;
}
void set_i( int n ) {
i = n;
}
int get_i() {
return i;
}
};
void sqr_it( samp *o ) {
o->set_i( o->get_i() * o->get_i() );
cout << "iのコピー値は " << o->get_i() << "\n";
}
int main() {
samp a(10);
sqr_it(&a);
cout << "今、mainは変更された:" << a.get_i() << "\n";
return 0;
}
$ ./study87
iのコピー値は 100
今、mainは変更された:100