考虑下面的代码片段。
Sayhi() 方法在类 Base 中具有公共访问权限。
Sayhi() 已被 Derived 类重写为私有方法。
通过这种方式,我们可以侵入某人的隐私,而 C++ 无法检测到它,因为事情发生在运行时。
我知道这是“纯粹的”编译时检查。但是当使用一些厚继承层次时,程序员可能会错误地更改访问说明符。标准不应该至少有发言权吗?某种警告信息。
为什么当覆盖或虚函数的访问说明符不同时,编译器至少不会发出警告消息?
Q1。C++ 标准对这种运行时异常有什么看法吗?
Q2。我想从 C++ 标准的角度理解,为什么标准不强制编译器实现者进行警告诊断?
#include <iostream>
class Base {
public:
virtual void Sayhi() { std::cout<<"hi from Base"<<std::endl; }
};
class Derived : public Base
{
private:
virtual void Sayhi() { std::cout<<"hi from Derived"<<std::endl; }
};
int main() {
Base *pb = new Derived;
// private method Derived::Sayhi() invoked.
// May affect the object state!
pb->Sayhi();
return 0;
}