子类对象赋值给父类引用的操作名称及是否属于对象切片的问询
问题解答
代码示例
#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
相关产品推荐
相关产品推荐

