背景
我刚刚偶然发现了一个用例override说明符据我所知,这似乎是多余的,而且也没有任何特定的语义含义,但也许我遗漏了一些东西,因此这个问题。在继续之前,我应该指出,我试图在这里找到答案,但我得到的最接近的是以下线程,并没有真正回答我的查询(也许有人可以指出实际上已经回答了我的问题的问答)问题)。
- C++ 虚拟/纯虚拟解释
- C++ 用纯虚方法重写纯虚方法
Question
考虑以下抽象类:
struct Abstract {
virtual ~Abstract() {};
virtual void foo() = 0;
};
有什么理由使用override
实现时的说明符foo()
在直接派生的非抽象类中Abstract
(as in DerivedB
以下)?即,当执行foo()
派生类是否已经需要成为非抽象类(并且不真正覆盖任何内容)?
/* "common" derived class implementation, in my personal experience
(include virtual keyword for semantics) */
struct DerivedA : public Abstract {
virtual void foo() { std::cout << "A foo" << std::endl; }
};
/* is there any reason for having the override specifier here? */
struct DerivedB : public Abstract {
virtual void foo() override { std::cout << "B foo" << std::endl; }
};
我不太喜欢override
,但是,假设您发现它通常有用,那么,是的,把override
对重写纯虚函数的虚函数很有用。考虑这个相当做作的例子:
struct Base {
virtual void f() = 0;
};
struct Derived : Base {
virtual void f();
virtual void f(int);
};
现在假设维护者Base
(也许甚至是未来的你)也会改变Base
看起来像这样:
struct Base {
virtual void f(int) = 0;
};
现在的行为Derived
已经悄然改变。和override
编译器会报告错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)