我只是偶然发现了一个override说明符的用例,据我所知,它似乎是多余的,也没有任何特定的语义含义,但也许我错过了一些东西,因此这个问题.在继续之前,我应该指出,我试图在这里找到答案,但最接近我得到的是以下主题,而不是真正回答我的问题(也许有人可以指出一个问答实际上已经回答了我的问题)题).
考虑以下抽象类:
struct Abstract {
virtual ~Abstract() {};
virtual void foo() = 0;
};
Run Code Online (Sandbox Code Playgroud)
在直接派生的非抽象类中override实现时foo(),有没有理由使用说明符Abstract(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; }
};
Run Code Online (Sandbox Code Playgroud)
我不是一个忠实的粉丝override,但是,假设它是一般你觉得有用的东西,那么,是的,override使用一个覆盖纯虚函数的虚函数是有用的.考虑这个相当人为的例子:
struct Base {
virtual void f() = 0;
};
struct Derived : Base {
virtual void f();
virtual void f(int);
};
Run Code Online (Sandbox Code Playgroud)
现在假设Base(或许甚至是你未来的自我)的维护者改变Base为这样:
struct Base {
virtual void f(int) = 0;
};
Run Code Online (Sandbox Code Playgroud)
现在的行为Derived已经悄然改变了.随着override编译器会报告一个错误.
| 归档时间: |
|
| 查看次数: |
1175 次 |
| 最近记录: |