【发布时间】:2016-10-17 20:16:48
【问题描述】:
想象一下,我有一个 C++ 中的超类 A,它有一个虚方法。如果我想在我的 B 类上覆盖它并仍然保持它是虚拟的,是否建议在 B 类上保留 virtual 关键字我可以忽略它,因为我已经说过该方法在超类上是虚拟的?
例如,执行以下操作的正确方法是什么。
方法一:
class A{
public:
virtual void hello(){
std::cout << "Hello World!" << std::endl;
};
};
class B: public A{
public:
virtual void hello() override{
std::cout << "Hello Sun!" << std::endl;
};
};
class C: public B{
public:
virtual void hello() override{
std::cout << "Hello Moon!" << std::endl;
};
};
或者仅在第一个类上将函数声明为虚拟函数。
方法B:
class A{
public:
virtual void hello(){
std::cout << "Hello World!" << std::endl;
};
};
class B: public A{
public:
void hello() override{
std::cout << "Hello Sun!" << std::endl;
};
};
class C: public B{
public:
void hello() override{
std::cout << "Hello Moon!" << std::endl;
};
};
我想在所有情况下都使用延迟投标。所以我需要 hello() 方法在三个类中是虚拟的。两种方法都适用于 CodeBlocks,但我不知道最好的方法是什么,或者它们之间是否有任何区别。
【问题讨论】:
-
您不需要保留
virtual关键字。你的代码出了什么问题? -
@πάνταῥεῖ 嘿,谢谢你的回复。我的代码运行良好我只是不知道实现它的最佳方法是什么(A 或 B)。现在我知道我不需要保留虚拟关键字