[英]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.