0

私はこのコードの結果が好きですが、興味がありました。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
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 に答える