簡體   English   中英

C ++繼承基類使用派生類的成員

[英]C++ inheritance Base class uses member of derived class

是否可以有一個基類,該基類具有派生類的實例作為該基類功能之一的參數? 例如:

class A
{
  virtual void foo(B b[]);
};
Class B: public A
{
  void foo(B b[]);
};

這合法嗎? 同樣,A類將需要包括B類的頭文件,這是否也有問題?

前向聲明是可能的:

class B;
class A
{
  virtual void foo(B b[]);
};
Class B: public A
{
  void foo(B b[]);
};

但這是主要的代碼氣味 請說明您要達到的目標,這看起來像是錯誤的設計。

您可以使用奇怪的重復模板模式:

template <class T>
class A
{
public:
    virtual void foo(T t[]);
};

class B: public A<B>
{
public:
    void foo(B b[]);
};

一種方法可能是定義一個接口類,該接口類定義要在派生類中公開的功能。 如果要訪問基類的成員函數中的派生類B內部,則此方法並不比已發布的方法更好。

class IntfB
{
  public:
    virtual void meth1() = 0;
    virtual void meth2() = 0;
};

class A
{
  public:
    virtual void foo(IntfB b[]);
};

class B : public A, public IntfB
{
  public:
    virtual void meth1();
    virtual void meth2();
};

暫無
暫無

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

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