告诉编译器有关子类-polymorphism的信息

时间:2014-05-21 18:12:41

标签: c++ polymorphism

如果我有一个baseclass Base和一个子类Sub,并且在子类中有一个不存在于超类中的成员函数 - 我该如何告诉编译器呢?

 #include <iostream>
using namespace std;

class Base {
public:

};

class Sub : public Base {

public:
    void printFromSub() {
        cout << "I am not inherited ;-)" << endl;
    }
};


int main() {

   Sub sub;
   Base* base;

   base = &sub;
   base->printFromSub(); // not possible at compile-time

   return 0;
}

1 个答案:

答案 0 :(得分:2)

你必须转换为派生类。

如果您确定base指向派生类的对象,则可以使用static_cast

static_cast<Sub*>(base)->printFromSub();

如果您不确定,那么您需要进行运行时检查。

Sub* p = dynamic_cast<Sub*>(base);
if (p) p->printFromSub();