考虑到我有 A 和 B 类,这样
class A
{
public:
void Fun();
};
class B : public A
{
....
};
作为A类的设计者,有什么方法可以强制派生类B和其他从A派生的类被阻止(出现某种错误)隐藏非虚函数Fun()?
考虑到我有 A 和 B 类,这样
class A
{
public:
void Fun();
};
class B : public A
{
....
};
作为A类的设计者,有什么方法可以强制派生类B和其他从A派生的类被阻止(出现某种错误)隐藏非虚函数Fun()?
如果您希望非virtual
成员函数始终可以以某种方式访问,那么只需将其包装在命名空间范围自由函数中:
namespace revealed {
void foo( A& o ) { o.foo(); }
}
现在B类的客户总是可以做
void bar()
{
B o;
revealed::foo( o );
}
但是,无论 B 类引入多少隐藏重载,客户端也可以这样做
void bar2()
{
B o;
A& ah = o;
ah.foo();
}
他们可以做到
void bar3()
{
B o;
o.A::foo();
}
所以所获得的只是更容易理解的符号和意图通信。
即,远非不可能,正如评论所言,可用性是您默认拥有的......