我了解到最好将虚函数保持私有(private),但是在我下面发布的代码中,除非友元可以继承,否则函数 call_inside()
应该无法调用虚函数D1 类中定义的函数。所以我想知道它是如何工作的。
感谢您的回复。
#include<iostream>
struct B
{
friend void call_inside();
private:
virtual void fun() {std::cout<<"virtual_B"<<std::endl;}
};
struct D1:public B
{
private:
void fun()override {std::cout<<"virtual_D1"<<std::endl;}
};
void call_inside()
{
B trial; D1 trial1;
B *p=&trial, *p1=&trial1;
p->fun();
p1->fun();
}
int main()
{
call_inside();
return 0;
}
最佳答案
call_inside
函数是B
的友元。在 call_inside
中,您调用了 fun
两次,两次都是通过指向 B
实例的指针。 B
指针之一实际上指向 D
这一事实并不重要,因为用于调用该函数的指针类型是 B
.如果您改为在 call_inside
中调用 trial1.fun()
,由于 fun
是 private,您将收到预期的编译错误
在 D
上,您尝试通过 D
实例调用它。
关于c++ - 从基类对象调用私有(private)虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31954049/