当前位置:首页 C++ > 正文

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
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击