【发布时间】:2016-07-10 21:46:32
【问题描述】:
给定一个指向抽象基类A* 的指针,我想复制或分配它(作为基类)并调用派生的复制构造函数或赋值运算符。我知道复制构造函数不能是虚拟的,所以大概复制构造函数不是这样做的选项,但赋值运算符是。不过,它似乎不起作用:打印以下代码
assigned a
x!
destroyed b
destroyed b
分配 b 失败。
#include <iostream>
using namespace std;
class A
{
public:
virtual void x()=0;
virtual ~A() {}
virtual A& operator=(const A& other) { cout << "assigned a" << endl; return *this;}
};
class B : public A
{
public:
virtual B& operator=(const B& other) { cout << "assigned b" << endl; return *this;}
virtual void x() { cout << "x!" << endl; }
virtual ~B() { cout << "destroyed b" << endl; }
};
int main()
{
A* a = new B();
A* aa = new B();
*aa=*a;
aa->x();
delete a;
delete aa;
return 0;
}
如何做到这一点?
编辑这个问题在下面得到了正确的回答,但它是错误的问题。我不应该尝试重写赋值运算符,因为我不希望 A 的子类将 分配给另一个。对于更简单的答案(希望),请参阅C++ elegantly clone derived class by calling base class
【问题讨论】:
-
这并不重要,但问题是关于虚拟基类,而代码没有。
-
我认为您的意思是 abstract 基类,而不是“虚拟”(这是完全不同的东西)。基类的抽象性与您的问题无关。
标签: c++ inheritance assignment-operator