c++基类和派生类对象的赋值转换(切片)
作者:野牛程序员:2024-01-03 13:43:16 C++阅读 3007
在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

