c++基类和派生类对象的赋值转换(切片)
作者:野牛程序员:2024-01-03 13:43:16 C++阅读 2415
在C++中,基类和派生类之间的赋值转换通常涉及到对象切片(object slicing)。对象切片发生在将派生类对象赋值给基类对象时,导致派生类对象的派生部分被截断,只有基类部分被复制。
#include <iostream> using namespace std; class Base { public: int baseData; Base(int data) : baseData(data) {} void display() { cout << "Base data: " << baseData << endl; } }; class Derived : public Base { public: int derivedData; Derived(int base, int derived) : Base(base), derivedData(derived) {} void display() { cout << "Base data: " << baseData << ", Derived data: " << derivedData << endl; } }; int main() { Derived derivedObj(10, 20); // 基类对象接收派生类对象,发生切片 Base baseObj = derivedObj; // 调用基类的display方法,只能访问基类部分的数据 baseObj.display(); return 0; }
在这个例子中,Derived
类是 Base
类的派生类。在 main
函数中,创建了一个 Derived
类对象 derivedObj
,然后将其赋值给一个 Base
类对象 baseObj
。由于对象切片,只有 Base
类部分的数据被复制到 baseObj
,而 Derived
类部分的数据被截断。
需要注意的是,如果想要访问完整的派生类对象,应该使用指针或引用:
Derived derivedObj(10, 20); // 使用指针或引用可以访问完整的派生类对象 Base* ptrBase = &derivedObj; ptrBase->display(); // 调用Derived类中的display方法
在这种情况下,通过指针或引用访问的是派生类对象的完整部分,而不会发生切片。
野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892