我有一个父类和子类(继承自父类).在子类中,我有一个名为的成员函数function_blah();
我曾经vector<parent*> A存储过5个父实例,3个子实例.因此向量中的元素总数为8.
我可以轻松访问元素A [0]到A [4]的成员函数,它们是父实例.但每当我尝试访问元素A [5]到A [7]的成员函数时,编译器就会抱怨class parent has no member named 'function_blah'
我访问元素的方式是使用索引.ex A [i],i = 0..7.这是对的吗?如果没有,怎么样?
您需要向下转发指向子类的指针,以便在其上使用子函数.
当您使用a访问子对象时parent*,您实际上是在告诉编译器"将此对象视为parent".由于function_blah()只存在于子节点上,编译器不知道该怎么做.
您可以使用运算符通过向下转换来改善这种情况dynamic_cast:
child* c = dynamic_cast<child*>(A[6]);
c->function_blah();
Run Code Online (Sandbox Code Playgroud)
这将从您可以调用parent*的child*地方执行运行时检查的类型安全转换function_blah().
这个解决方案只有在你知道你要拔出的对象肯定是a child而不是a 时才有效parent.如果存在不确定性,那么您需要做的是使用继承并在父项上创建一个虚拟方法,然后在子项上重载.