You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

子类对象赋值给父类引用的操作名称及是否属于对象切片的问询

问题解答

代码示例

#include <iostream>
#include <vector>

using vec = std::vector<double>;

class my_vec
: public vec
{
    public:
        my_vec(int size)
        :vec(size, 0)
        {}

        my_vec(int size, double val)
        :vec(size, val)
        {}
};


int main() 
{
    my_vec v1 (6);
    my_vec v2 (6,3);

    std::vector<double>& v3 = v1;
    v3[0] = 10;
    v3.push_back(10);

    std::cout << "Finish" << std::endl;

    return 0;
}

核心问题解答

  • 这种parent& v3 = child的操作叫做向上转型(Upcasting),它是C++多态机制的基础操作之一,通过父类引用直接绑定子类对象,本质是让父类类型的引用指向子类对象中属于父类的内存区域,但因为是引用类型,不会复制对象,原子类对象的完整性完全保留。
  • 该操作不属于对象切片。对象切片的定义是:将子类对象直接赋值给父类对象(比如parent p = child;),此时会创建一个新的父类对象,仅复制子类中属于父类的成员部分,子类独有的成员会被“切掉”;而向上转型用引用绑定的方式,没有创建新对象,只是用父类引用操作原子类对象的父类部分,原子类对象的所有成员都完好存在,不存在切片行为。

内容的提问来源于stack exchange,提问作者user18893035

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 13:47:13