[英]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.