簡體   English   中英

調用子類函數

[英]calling child class function

如何從指向父項的類型為parent的指針調用子項功能?

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”。

我收到此錯誤:

“ class 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 successful\n";
    d->printFunction(); // safe to call
  }

  delete ptr_derrived;

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM