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