我已经了解到最好将虚拟函数保密,但在我下面发布的代码中,除非友谊可以继承,否则函数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;
}
答案 0 :(得分:1)
call_inside
函数是B
的朋友。在call_inside
范围内,您通过指向fun
实例的指针两次调用B
。其中一个B
指针实际指向D
的事实并不重要,因为用于调用函数的指针类型为B
。如果您改为在trial1.fun()
中致电call_inside
,则由于fun
private
D
上D
并且您尝试调用它,您将收到预期的编译错误通过angular.module('batchUploadApp').service('ExcelParserService', ...
实例。