gpt4 book ai didi

c++ - 从基类对象调用私有(private)虚函数

转载 作者:太空狗 更新时间:2023-10-29 23:01:03 28 4
gpt4 key购买 nike

我了解到最好将虚函数保持私有(private),但是在我下面发布的代码中,除非友元可以继承,否则函数 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 中,您调用了 fun 两次,两次都是通过指向 B 实例的指针。 B 指针之一实际上指向 D 这一事实并不重要,因为用于调用该函数的指针类型是 B .如果您改为在 call_inside 中调用 trial1.fu​​n(),由于 funprivate,您将收到预期的编译错误D 上,您尝试通过 D 实例调用它。

关于c++ - 从基类对象调用私有(private)虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31954049/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com