繁体   English   中英

从Base类对象调用私有虚函数

[英]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 ,你会得到预期由于编译错误funprivateD和你试图通过一个称之为D实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM