我可以从对象外部调用 VFunc 吗?

Can i call VFunc from outside of the object?

本文关键字:VFunc 外部调用 对象 我可以      更新时间:2023-10-16

我喜欢这段代码的结果,但我很好奇,是否可以从main()调用B::VFunc()?我知道在 C 内部编写B::VFunc();会调用它,但是是否可以从对象外部调用该函数?

http://ideone.com/Dg8aa

#include <cstdio>
class I { public: virtual void VFunc()=0; };
class B : public I { public: void VFunc() { printf("Bn"); } };
class C : public B { public:  void VFunc() { printf("Cn"); } };
int main(){
    C v;
    B&i = v;
    i.VFunc();
}

输出:

C

这将做到这一点:

#include <cstdio>
class I { public: virtual void VFunc()=0; };
class B : public I { public: void VFunc() { printf("Bn"); } };
class C : public B { public:  void VFunc() { printf("Cn"); } };
int main(){
    C v;
    B&i = v;
    i.B::VFunc();
}

示例:http://ideone.com/MfyYJ

你可以诉诸切片:

C v;
B i = (B)v;

http://ideone.com/YVI2T

v的动态类型丢失,因此调用B::VFunc