继承行为问题

时间:2011-09-30 16:12:22

标签: c++ inheritance

我一直在阅读有关继承的内容,但我仍然没有100%清楚,这是我的问题: 我有一个充满东西的课程:

class Something
{
  public:
    Something();
    Something(int A);
    Something(Something S);
    ~Something();

    Something& operator=(const Something & s);
    Something operator+(const Something & s) const;
    // more methods ...
  protected:
    int A,B,C;
}

所有方法实现某处,现在我只想要一个新类添加一个属性和一个方法,但我仍然想要与SuperClass相同的行为(构造函数,析构函数,方法,运营商),所以我这样做:

class SomethingMore : public Something
{
  public:
    void OnlyMethodHere();
  private:
    int D;
}

但我得到的结论是:

undefined reference to SomethingMore::SomethingMore(int)

有没有告诉编译器使用所有内容就像在SuperClass中一样,或者我是否必须在每个子方法中创建一个SuperClass :: method()?

3 个答案:

答案 0 :(得分:4)

您不必重复方法。但对于构造函数,您必须在子类中正确定义它们。无论如何,代码是锅炉板,除非你有任何额外的。

SomethingMore::SomethingMore(int i_):Something(i_)
{
}

答案 1 :(得分:0)

在c ++ 0x中,可以通过以下方式完成:

class BaseClass
{
public:
  BaseClass(int iValue);
};

class DerivedClass : public BaseClass
{
public:
  using default BaseClass;
};

,但我不知道现在支持它的任何编译器。如果要与旧编译器保持兼容,则必须重复派生类中的所有构造函数,如

class BaseClass
{
public:
  BaseClass(int iValue);
};

class  : public BaseClass
{
public:
  DerivedClass(int iValue):BaseClass(iValue){}
};

答案 2 :(得分:0)

你可以获得与this answer中相同的效果,在C ++ 0x中使用一种catch-all构造函数:

class SomethingMore
{
public:
    .......
    template<class... Args>
    SomethingMore(Args&&... args) : Something(std::forward<Args>(args...)) {}
}