And*_*ong 3 c++ overriding virtual-functions
是否可以覆盖(隐藏)非虚方法,但仍然可以从子类中显式调用它?它可以工作,但我不知道它是特定于编译器还是应该因某种原因而避免.(我没想到它会根据"隐藏"功能的术语而起作用.)
class A
{
public:
void foo()
{
cout << "A::foo()" << endl;
}
};
class B : public A
{
public:
void foo()
{
cout << "B::foo()" << endl;
A::foo();
}
};
int main()
{
B b;
b.foo();
}
Run Code Online (Sandbox Code Playgroud)
这可能会更多地关注这个问题.
父的非虚方法在我们无法改变的基础设施库中,但是我们需要派生一个隐藏的类(不是"覆盖",正如我现在所学到的)一个支持增强它的功能(和在途中明确地调用父元素.也就是说,派生类需要使用这个"扩充"函数来代替父类.这是隐藏父函数的有效方案吗?
没关系,但你没有压倒一切.正如你已经提到的那样,你正在躲藏.覆盖意味着多态性将对您的对象起作用,在您的情况下,它不会.
例如:
A* a = new B;
a->foo();
Run Code Online (Sandbox Code Playgroud)
将调用该方法A::foo(),而如果您要覆盖该方法(通过制作它virtual),它将调用B::foo().
另外请注意,有可能是与实际签字问题,例如,如果你有方法B::foo(int),你就不能称之为foo(void)一个上B直接对象.