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

时间:2012-05-14 21:41:02

标签: c++ virtual

我喜欢这段代码的结果,但我很好奇,是否可以从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("B\n"); } };
class C : public B { public:  void VFunc() { printf("C\n"); } };

int main(){
    C v;
    B&i = v;
    i.VFunc();
}

输出:

C

2 个答案:

答案 0 :(得分:7)

这样做:

#include <cstdio>
class I { public: virtual void VFunc()=0; };
class B : public I { public: void VFunc() { printf("B\n"); } };
class C : public B { public:  void VFunc() { printf("C\n"); } };

int main(){
    C v;
    B&i = v;
    i.B::VFunc();
}

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

答案 1 :(得分:1)

你可以诉诸切片:

C v;
B i = (B)v;

http://ideone.com/YVI2T

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