继承vector时修改其大小的问题求助
为什么子类实例的继承vector成员不会同步变化?
这是个很典型的C++类成员变量基础问题,我来给你掰扯清楚:
你现在的父类Parent里的functions是普通的非静态成员变量——换句话说,每个类的实例(对象)都会拥有这份成员变量的独立副本。哪怕是继承自Parent的子类(child、child2),每个子类对象也会自带一个属于自己的functions vector,它们之间完全不共享。
举个实际的例子:
- 当你创建一个
child对象,调用它的change_size()方法时,你修改的只是这个child对象自己的functions,把元素塞进去后,它自己的vector大小变成1; - 而你创建的
child2对象是另一个完全独立的实例,它的functions是从Parent继承来的全新副本,根本没被修改过,所以大小自然还是0。
如果想要所有子类实例共享同一个vector,你需要把functions声明为静态成员变量,修改父类的代码:
class Parent { public: static vector<Parent*> functions; // 加static关键字 }; // 注意:静态成员必须在类外部定义(全局作用域) vector<Parent*> Parent::functions;
这样一来,不管你创建多少个child、child2的实例,它们都会共用同一个functions vector,修改其中一个的内容,所有实例访问到的都是同一个数据,大小就会同步变化了。
另外提个小细节:你代码里的pushback写错啦,C++里vector的方法是push_back,记得修正这个拼写错误哦。
内容的提问来源于stack exchange,提问作者New dragon
相关产品推荐
相关产品推荐

