有四个类,Base,Child,GrandChild,Base1这个四个类,然后Base中有一个virtual f()函数,child中没有覆写这个函数,在grandchild中覆写了这个函数,grandchild继承了base1和child类,base1中没有任何东西。
在main中什么都没打印出来,不知道为什么会这样。但是在class GrandChild:public Base1,public Child中换一下Base1和Child的位置的话,就可以打印出来grandchild.f()。
在main中什么都没打印出来,不知道为什么会这样。但是在class GrandChild:public Base1,public Child中换一下Base1和Child的位置的话,就可以打印出来grandchild.f()。
#ifndef BASE_H #define BASE_H class Base { public: Base(); virtual void f(); //实现为打印base.f() virtual ~Base(); }; #endif // BASE_H
#ifndef CHILD_H #define CHILD_H #include "Base.h" class Child:public Base { public: Child(); virtual ~Child(); protected: private: }; #endif // CHILD_H
#ifndef GRANDCHILD_H #define GRANDCHILD_H #include<Child.h> #include<Base1.h> class GrandChild:public Base1,public Child { public: GrandChild(); virtual void f(); //打印grandchild.f() virtual ~GrandChild(); protected: private: }; #endif // GRANDCHILD_H
#ifndef BASE1_H #define BASE1_H class Base1 { public: Base1(); virtual ~Base1(); protected: private: }; #endif // BASE1_H
#include <iostream> #include<Base.h> #include<GrandChild.h> using namespace std; int main() { void *v = new GrandChild(); Base *b = (Base*)v; b->f();//什么都没打印出来 return 0; }
解决方案:40分
void *v = new GrandChild(); Base *b = (GrandChild*)v;