我一直在阅读有关继承的内容,但我仍然没有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()?
答案 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...)) {}
}