调用子类函数

calling child class function

本文关键字:类函数 调用      更新时间:2023-10-16

如何从指向子函数的父类型指针调用子函数?

class a{
public:
    virtual void print(){cout << "From a" << endl;}
};
class b: public a{
public:
    void print(){cout << "Form b" << endl;}
    void printFunction(){cout << "Exist in b" << endl;}
};
int main() {
    a* Obj = new b;
    Obj->print();
    Obj->printFunction();
    return 0;
}

在这里,我有一个指向"b"的类型"a"的指针。我想调用仅在类 b 中定义的"printFunction"。

我收到此错误:

"

类 A"没有名为"printFunction"的成员

问题是如何使用此指针调用"printFunction"?或者如何在这里应用铸造?

使用 dynamic_cast

class a{
public:
    virtual ~a(){}
    virtual void print(){ cout << "From a" << endl; }
};
class b: public a{
public:
    void print(){ cout << "Form b" << endl; }
    void printFunction(){ cout << "Exist in b" << endl; }
};
int main() {
    a* Obj = new b;
    Obj->print();
    b* bObj = dynamic_cast<b*>(a);
    if (bObj)
        bObj->printFunction();
    delete a;
    return 0;
}
您可以使用

dynamic_cast转换进行向下转换

class base {
  public:
    void print() {std::cout << "base class print";}
};
class derived : public base {
  public: 
    void printFunction() {std::cout << "derived class print";}
};
int main() {
  base* ptr_derrived  = new derived();
  if(Derived* d = dynamic_cast<derived*>(ptr_derived) {
    std::cout << "downcast successfuln";
    d->printFunction(); // safe to call
  }
  delete ptr_derrived;
}