在Cplusplus中,在派生类中,如果我们定义一个成员函数来覆盖其父类中的成员函数,我们是否需要将派生类中的成员函数声明为虚拟?
例如,我们是否需要声明g为虚拟B输入才能覆盖A::g?以下哪一项对于上述目的是正确的?
class A{
public:
void f(){printf("A");}
virtual void g(){printf("A");}
}
class B : public A{
public:
void f(){printf("B");}
void g(){printf("B");}
}
Run Code Online (Sandbox Code Playgroud)
要么
class A{
public:
void f(){printf("A");}
virtual void g(){printf("A");}
}
class B : public A{
public:
void f(){printf("B");}
virtual void g(){printf("B");}
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
一旦方法在类中是虚拟的,即使您没有添加virtual它们,它的子类也具有这些虚拟类.
添加override是避免细微错误的好习惯:
class A{
public:
void f() { printf("A"); }
virtual void g() { printf("A"); }
};
class B : public A{
public:
void f() { printf("B"); }
void g() override { printf("B"); }
};
Run Code Online (Sandbox Code Playgroud)
不,你没有.该函数从层次结构中的第一个点开始是虚拟的,您可以在其中声明它.
您可以而且应该override在c ++ 11及更高版本中指定它.它明确指定您正在尝试覆盖基类中的虚函数.如果拼错函数名称,错误输入参数或执行其他任何可以被视为添加函数重载的内容,则会发出错误.在c ++ 11之前,以前的错误会默默编译.
| 归档时间: |
|
| 查看次数: |
89 次 |
| 最近记录: |