簡體   English   中英

從基礎 class 實例調用派生的 class 方法而不進行強制轉換

[英]Call derived class method from base class instance without casting

還有另一種方法可以從基指針 object 調用派生的 class 方法而不進行轉換?

class Base
{
};

class Derived : public Base
{
    public:
    void set() {printf("bbbbbbbbbbbb"); }

};

int main()
{
  Base* pbBase;

  pbBase = new Derived();

  //pbBase->set(); // Compilation error.
  (Derived*)pbBase->set(); // Working.
}

您可以在Base中添加您在Derived中覆蓋的virtual方法。

請注意,您也應該將析構函數設為virtual ,否則當您通過基本 class 指針delete object 時,不會調用派生類的析構函數。

#include <iostream>

class Base
{
public:
    virtual ~Base() = default;
    virtual void set() = 0;    // = 0 makes it pure virtual
};

class Derived : public Base
{
public:
    void set() override { std::cout << "bbbbbbbbbbbb\n"; }

};

int main()
{
  Base* pbBase;

  pbBase = new Derived();

  pbBase->set();

  delete pbBase;
}

暫無
暫無

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

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