从父级调用子虚函数

时间:2013-03-26 18:32:05

标签: c++

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

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

感谢。

2 个答案:

答案 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();
}

首先doreserved wordmain未正确宣布且printf需要char *

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

因此您尝试进行从charchar *的无效转换。

答案 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()内部调用内联。