C++中的對象切片問題通常發(fā)生在通過基類指針或引用操作派生類對象時。對象切片會導致派生類的部分信息丟失,因為基類只能訪問其自身的成員,而無法訪問派生類的特有成員。
雖然繼承可以在一定程度上解決對象切片問題,但并非萬能解決方案。以下是一些建議:
class Base {
public:
virtual void foo() {}
};
class Derived : public Base {
public:
void foo() override {}
};
Base* basePtr = new Derived();
basePtr->foo(); // 調用派生類中的foo函數
std::vector<std::shared_ptr<Base>>
。這樣,容器中可以存儲任意類型的派生類對象,而不會發(fā)生對象切片。std::vector<std::shared_ptr<Base>> vec;
vec.push_back(std::make_shared<Derived>());
vec[0]->foo(); // 調用派生類中的foo函數
總之,繼承可以在某些情況下解決對象切片問題,但并非所有情況都適用。在實際編程中,應根據具體需求選擇合適的方法來避免對象切片。