假設我有兩個類A和B. B從A派生。A沒有數據成員,但B有兩個整數成員。C++:在基類的成員函數中複製對象數據
如果我在類A定義的方法,如下所示:
void CopyFrom(const A* other)
{
*this = *other;
}
,並調用它的子類,將整數數據成員被複制?
假設我有兩個類A和B. B從A派生。A沒有數據成員,但B有兩個整數成員。C++:在基類的成員函數中複製對象數據
如果我在類A定義的方法,如下所示:
void CopyFrom(const A* other)
{
*this = *other;
}
,並調用它的子類,將整數數據成員被複制?
不可以。這被稱爲slicing problem。
這是真實的,即使你在這兩個A
和B
超載operator=
:*this = *other
將只解析爲A::operator=(const A&)
或B::operator=(const A&)
被調用。
如何解決?在使用前投射它? – atoMerz 2011-05-11 17:07:27
@AtoMerZ:這取決於你想要做什麼。如果你遇到了一個情況,你有一個指向B的'A *',而你想'CopyFrom'和另一個'B',那麼你可能做錯了! – 2011-05-11 17:10:14
@AtoMerZ:[這個答案](http://stackoverflow.com/questions/274626/what-is-the-slicing-problem-in-c/274977#274977)的鏈接問題給出了最好的解決方案。 – Johnsyweb 2011-05-11 17:14:24
this
沒有任何空間給子類的成員。所以Derived類的成員只會被切分。這個問題被稱爲Object Slicing
。
如何解決?
預防勝於治療!
不要將您的代碼引入到Object Slicing
發生的情況。
如果您面臨的問題是Object Slicing
,那麼您的建築/設計軟件程序設計不佳。除非因爲權宜而犧牲良好的面向對象設計。
我認爲他們不會被複制,但我想聽到正確的答案。 – 2011-05-11 17:07:39