我有一个基类
class Base{
public:
virtual ~Base();
};
我从Base派生了两个类:
class D1:public Base{
//...some fields
//assignment operator, it does the deep copy of the members
D1& operator=(const D1&);
};
class D2:public Base{
//...some fields
//assignment operator, it does the deep copy of the members
D2& operator=(const D2&);
};
接下来,主要来说我有两个对象,例如D1
。问题在于,永远不会调用覆盖的赋值运算符,但是会调用默认的基数。我试图在Base
中将赋值运算符虚拟化,但这没有帮助。
D1 *d1 = new D1();
D1 *d1_another = new D1();
//this doesn't work:
d1 = d1_another
D2 *d2 = new D2();
D2 *d2_another = new D2();
//this doesn't work:
d2 = d2_another
UPD 我也想知道如何处理
Base *d1 = new D1();
Base *d1_another = new D1();
//?
d1 = d1_another
答案 0 :(得分:1)
#include <iostream>
#include <string>
using namespace std;
class Base {
public:
virtual ~Base() {}
};
class D1 : public Base {
public:
virtual ~D1() {}
//...some fields
//assignment operator, it does the deep copy of the members
D1& operator=(const D1&) {
cout << "D1:operator=(const D1&)\n";
return *this;
}
};
class D2 : public Base {
public:
virtual ~D2() {}
//...some fields
//assignment operator, it does the deep copy of the members
D2& operator=(const D2&) {
cout << "D2:operator=(const D2&)\n";
return *this;
}
};
D1 *d1 = new D1();
D1 *d1_another = new D1();
//this doesn't work:
*d1 = *d1_another;
D2 *d2 = new D2();
D2 *d2_another = new D2();
//this doesn't work:
*d2 = *d2_another;