c ++可以使用指向类的指针来调用子类方法

时间:2013-11-07 14:52:56

标签: c++ pointers vector

我在某个类中将Vector vector c_<class A * >;声明为私有。此向量保存指向A的子类的指针。例如:

some_class::func {
    c_.push_back (new A2);  // same as A1.
    c_.push_back (new A1);  //A1 is subclass : class A1 : public A;
    (c_.back()->methode1(); //returns a reference of A1's private member x_ for example 
}

我得到的错误是:没有在A类中定义的这种方法。
在A级,它没有在A级中被宣布,而是在A1级宣布。我看到的方式是c_.back获取向量c_中的最后一个元素。这是一个指向A1类的指针,所以我用以下方法取消引用它: - &gt;并在指针指向(A1)的类中调用methode1()。但我得到一个错误,但我不知道它出错了。

1 个答案:

答案 0 :(得分:4)

您只能从指向A的指针访问A个方法。要在A1元素上调用c_方法,您必须转换为A1,或重新考虑您的设计。

A1* a1 = dynamic_cast<A1*>(c_.back());
if (a1) a1->methode1();

矢量只是一种分心。你有相同的:

A* a = new A1();
a->methode1();  // Error, A has no methode1()

A1* a1 = dynamic_cast<A1*>(a);
if (a1) a1->methode1(); // OK, call the method only if the cast succeeded.

一般来说,如果你发现自己过于频繁地执行这些演员表,那不是一个好兆头。