我正在尝试了解在从父类继承方法时何时需要在头文件中声明函数。
例如,假设我有以下类:
class parent{
public:
virtual void foo()= 0;
}
假设我有一个继承自父类的子类,我还必须在子文件头文件中声明foo,还是可以在源文件中为子文件定义方法?
下面的声明会不正确吗?
Headerfile:
class child : public parent{
}
类文件:
child::foo(){
// do something
}
答案 0 :(得分:1)
基类中的非虚方法在子类中继承,因此您不需要在子类中再次定义或声明它们。在派生类对象上调用的非虚方法将只调用Base类中定义的方法(提供访问说明符规则允许你)
如果在Derived类中再次从基类声明一个方法,则它在派生类中声明一个新方法,隐藏所有具有相同名称的基类方法。这被称为功能隐藏。
好读:
<强> What's the meaning of, Warning: Derived::f(char) hides Base::f(double)? 强>
对于虚方法,您不需要在Child类中再次声明Base类方法,您只需要提供一个定义。这被称为功能覆盖。
答案 1 :(得分:0)
标题文件:
class Class : public Parent {
public:
void myMethod();
}
源文件:
void Class::myMethod(){
}
答案 2 :(得分:0)
您不必在子类的定义或标题中声明foo()
。它是自动继承的 - 这就是继承的含义。 (当然,函数在基类(public
)中必须是private
而不是parent
,但这是次要的peccadillo。)
您只需在子类的源文件中定义方法。