class A
{
public:
A(int val) : m_ValA(val) {}
A(const A& rhs) {}
int m_ValA;
};
class B : public A
{
public:
B(int val4A, int val4B) : A(val4A), m_ValB(val4B) {}
B(const B& rhs) : A(rhs), m_ValB(rhs.m_ValB) {}
int m_ValB;
};
int main()
{
A* b1 = new B(1, 2);
A* b2 = new A(*b1); // ERROR...but what if it could work?
return 0;
}
将c + +,如果被打破的 “新A(B1)” 是能够解决创造一个新型B拷贝并返回一个?
这会甚至有用吗?
+1叫,但我也想补充一个虚拟析构函数的类;) – 2009-06-20 14:00:30
这确实是一个思想实验。虽然这是实现虚拟拷贝构造函数的标准方式,但我很好奇为什么这种语言没有提供一种标准化的方式来实现这一点。 – 0xC0DEFACE 2009-06-21 12:41:03
协变回报更好:B * B :: Clone() – 2018-01-24 17:11:09