是否可以有一个基类,它具有派生类的实例作为基类函数之一的参数?例如:
class A
{
virtual void foo(B b[]);
};
Class B: public A
{
void foo(B b[]);
};
这合法吗?A 类也需要包含 B 类的头文件,这也有问题吗?
是否可以有一个基类,它具有派生类的实例作为基类函数之一的参数?例如:
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();
};