C++设计(基类中的行为,派生类中提供的私有成员)

jww*_*jww 0 c++ inheritance composition

我有6个类,它们都执行相同的操作.我想将常见行为转移到一个共同的[基础]类.

要对6个单独的对象执行操作.六个对象位于派生类中.直观地,私有成员对象将通过基类中的子(派生类)进行访问.

我在寻找什么是C++模式?

class Base
{
  // Common behavior, operate on m_object
  ...
  void Foo()
  {
    m_object.Bar();
  }
};

class Derived1 : public Base
{
  // No methods, use Base methods

  private:
  MyObject1 m_object;
}

class Derived2 : public Base
{
  // No methods, use Base methods

  private:
  MyObject2 m_object;
}
Run Code Online (Sandbox Code Playgroud)

这是拳击我到这种情况的事情是MyObject1,MyObject2等报价Bar(),但不共享一个共同的基类.我真的无法修复派生,因为对象来自外部库.

Max*_*Max 5

如果它们是在派生类中引入的,则基类不能直接访问它们.基类如何知道所有派生类都有特定的成员?

您可以使用虚拟保护方法,如下所示:

class my_base
{
protected:
    virtual int get_whatever();
    virtual double get_whatever2();
private:
    void process()
    {
       int y = get_whatever();
       double x = get_whatever2();
       //yay, profit?
    }
}

class my_derived_1 : my_base
{
protected:
    virtual int get_whatever()
    {
        return _my_integer;
    }

    virtual double get_whatever2()
    {
       return _my_double;
    }
}
Run Code Online (Sandbox Code Playgroud)

另一种可能性(如果你想从派生类调用基本方法)是简单地为基本方法提供参数.

class my_base
{
protected:
    void handle_whatever(int & arg);
};

class my_derived : my_base
{
    void do()
    {
      my_base::handle_whatever(member);
    }

    int member;
};
Run Code Online (Sandbox Code Playgroud)

  • @noloader:但任何假设的"超级"概念都不会回答这个问题 - 这恰恰相反!那你在想什么? (2认同)