请帮帮我.我真的不擅长多态性.我必须从另一个继承的类.
编辑:对不起,完全是我的错误.即使我已经过了大约2个小时才能找到问题.有兴趣的人(感谢所有帮助)
if (type.compare("TEST1") == 0) result = new Test(ID, database);
if (type.compare("TEST2") == 0) result = new Test(ID, database);
if (type.compare("TOR") == 0) result = new Tor(ID, database);
Run Code Online (Sandbox Code Playgroud)
"== 0"完全失踪了.
class A {
public:
void go() {do();}
virtual void do() {printf('A');}
}
class B:public A {
virtual void do() {printf('B');}
}
int main {
A* obj = new B();
obj->go();
}
Run Code Online (Sandbox Code Playgroud)
结果是'A'而不是'B'.我怎样设法让它成为'B'?
谢谢.
代码不按原样编译,但经过多次修改后,我似乎得到了预期的结果:
#include <cstdio>
class A {
public:
void go()
{
do1();
};
virtual void do1() {printf("a");}
};
class B:public A {
virtual void do1() {printf("b");}
};
int main() {
A* obj = new B;
obj->go();
}
Run Code Online (Sandbox Code Playgroud)
首先do是一个保留字,main未被正确宣布并printf采取char *:
int printf(const char *format, ...);
Run Code Online (Sandbox Code Playgroud)
所以你尝试从做一个无效的转换char来char *.