[英]Call private virtual functions from Base class object
我已经了解到保持虚函数是私有的更好,但是在我下面发布的代码中,除非友谊可以继承,函数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
你通过指向B
实例的指针两次调用fun
。 事实上,其中一个B
指针实际上指向D
是无关紧要的,因为用于调用该函数的指针的类型是B
如果改为调用trial1.fun()
在call_inside
,你会得到预期由于编译错误fun
是private
的D
和你试图通过一个称之为D
实例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.