私はJavaから来ていますので、ご容赦ください。他のいくつかの記事を読みましたが、答えが見つからないようです。
以下に示す基本クラス (Obj) ヘッダー ファイルがあります。
class Obj {
public:
Obj();
Obj(int);
int testInt;
virtual bool worked();
Obj & operator = (const Obj & other) {
if(this != &other) {
//other.testInt = this->testInt;
return *this;
}
}
};
基本クラス
Obj::Obj() {
}
Obj::Obj(int test) {
this->testInt = test;
}
bool Obj::worked() {
return false;
}
これが子クラスのヘッダーです
class Obj1 : public Obj {
public:
Obj1();
Obj1(int);
virtual bool worked();
};
子クラス
#include "Obj1.h"
Obj1::Obj1() {
}
Obj1::Obj1(int a) {
this->testInt = a / 2;
}
bool Obj1::worked() {
return true;
}
これが私のメインクラスです
int main() {
Obj obj = Obj(99);
Obj1 obj1 = Obj1(45);
obj = obj1;
if(obj.worked())
cout << "good" << obj.testInt << endl;
else cout << "bad " << obj.testInt << endl;
if(obj1.worked()) {
cout << "1good " << obj1.testInt << endl;
} else
cout << "1bad " << obj1.testInt << endl;
return 0;
}
実行時の出力は次のとおりです
bad 99
1good 22
どうすれば取得できますかobj = obj1; (上記の main にあります) obj.worked() が true を返すようにします (obj1 のクラスがそれを定義する方法であるため)? 基本的に、Javaのように動作させるにはどうすればよいですか? ディープ コピーは必要ありません。obj が参照していたものを捨てて、obj1 を指すようにしたいだけです (Java での動作はこれだと思います)。