-4

请帮帮我。我真的不擅长多态。我必须从另一个继承一个类。

编辑:对不起,完全是我的错误。甚至我已经过了大约 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'?

谢谢。

4

2 回答 2

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是一个保留字main没有正确声明并printf采用char *

int printf(const char *format, ...);

char所以你试图从to进行无效转换char *

于 2013-03-26T18:38:34.967 回答
-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()inside go()

于 2013-03-26T18:46:42.597 回答