请帮帮我。我真的不擅长多态性。我必须从另一个继承一个类。
编辑: 对不起,完全是我的错误。即使我已经过了大约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);
“== 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();
}
结果是'A'而不是'B'。我怎样设法让它'B'?
感谢。
答案 0 :(得分:5)
代码不能按原样编译,但经过多次修改后,我似乎得到了预期的结果:
#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();
}
首先do
是reserved word,main
未正确宣布且printf
需要char *
:
int printf(const char *format, ...);
因此您尝试进行从char
到char *
的无效转换。
答案 1 :(得分:-1)
我整理了一些东西以便编译:
#include <stdio.h>
class A {
public:
virtual void DO() {printf("A");}
void go() {DO();}
};
class B:public A {
virtual void DO() {printf("B");}
};
int main() {
A* obj = new B();
obj->go();
return 0;
}
(do
是一个关键字,printf
取char *而不是char,main
需要括号,并返回一个整数)
无论我设置的优化级别如何,它始终为我生成B
:
$ g++ inherit.cpp -o inherit && ./inherit
B
$ g++ inherit.cpp -O1 -o inherit && ./inherit
B
$ g++ inherit.cpp -O2 -o inherit && ./inherit
B
$ g++ inherit.cpp -O3 -o inherit && ./inherit
B
$ g++ inherit.cpp -O4 -o inherit && ./inherit
B
$ g++ inherit.cpp -O5 -o inherit && ./inherit
B
然而,您可能已经在编译器中遇到了一个边缘情况,该编译器决定将您do()
内部的go()
内部调用内联。