C ++继承Base类使用派生类的成员

时间:2012-08-08 22:28:25

标签: c++ class inheritance

是否可以将具有派生类实例的基类作为基类函数之一的参数?例如:

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

这合法吗? A类还需要包含B类的头文件,这也有问题吗?

3 个答案:

答案 0 :(得分:7)

可以通过前瞻声明:

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

这是一个主要的代码味道。请说明你想要实现的目标,这看起来像是一个错误的设计。

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:0)

一种方法可能是定义一个接口类,该接口类定义要在派生类中公开的功能。如果要在基类的成员函数中访问派生类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();
};