簡體   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