0

我喜欢这段代码的结果,但我很好奇,是否可以从 main() 调用 B::VFun​​c()?我知道在 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
4

2 回答 2

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

于 2012-05-14T21:47:58.800 回答
1

您可以使用切片:

C v;
B i = (B)v;

http://ideone.com/YVI2T

的动态类型v丢失了,所以B::VFunc叫。

于 2012-05-14T21:42:08.677 回答