簡體   English   中英

如何調用基類的虛擬函數定義,該基類在C ++中的抽象基類和派生類中均具有定義?

[英]How can I call virtual function definition of base class that have definitions in both abstract base class and derived class in C++?

我們不能創建抽象類的對象,對嗎? 那么,如何調用在抽象基類和派生類中均具有定義的虛函數呢? 我想在抽象基類中執行代碼,但是目前,我正在使用派生類的對象。

class T
{
   public:
   virtual int f1()=0;
   virtual int f2() { a = 5; return a }
}
class DT : public T
{
   public:
   int f1() { return 10; }
   int f2() { return 4; }
}

int main()
{
    T *t;
    t = new DT();
    ............
}

有什么方法可以使用對象t調用基類函數嗎? 如果不可能,我該怎么做才能調用基類函數?

就像您將調用任何其他基類實現一樣:使用顯式限定條件繞過動態調度機制。

struct AbstractBase
{
  virtual void abstract() = 0;

  virtual bool concrete() { return false; }
};

struct Derived : AbstractBase
{
  void abstract() override {}

  bool concrete() override { return true; }
};

int main()
{
  // Use through object:
  Derived d;
  bool b = d.AbstractBase::concrete();
  assert(!b);

  // Use through pointer:
  AbstractBase *a = new Derived();
  b = a->AbstractBase::concrete();
  assert(!b);
}

您可以在調用函數時顯式指定類范圍:

  class A { /* Abstract class */ };
  class B : public A {}

  B b;
  b.A::foo();

如果抽象基類具有一些代碼,則只需調用BaseClassName :: AbstractFunction()

class Base
{
    virtual void Function()  {}
}

class Derived : Base
{   
    virtual void Function() { Base::Function(); }
}

暫無
暫無

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

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