告诉编译器子类-多态性

Tell compiler about subclass -polymorphism

本文关键字:多态性 子类 编译器      更新时间:2023-10-16

如果我有一个基类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;
}

必须转换为派生类。

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

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

如果你不确定,那么你需要一个运行时检查。

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