【发布时间】:2011-06-02 05:44:05
【问题描述】:
#include <cstdio>
using namespace std;
class A {
public:
virtual void func() { printf("A::func()"); }
};
class B : public A {
public:
virtual void func() { printf("B::func()"); }
};
int main() {
A a = *(A *)new B();
a.func();
}
问题很简单:为什么a->func() 调用类A 中的函数,即使a 包含B 类的对象?
【问题讨论】:
-
当语法错误得到修复以便编译时,您的代码会做正确的事情(调用
B::func())。由于这不是您的实际代码,我不知道您的问题可能是什么! -
这段代码可以编译(至少对我来说)。 Visual C++ 2008 速成版
-
@mnm:啊,我看到你已经改变了。实际上,它仍然没有编译(在每个类定义的末尾缺少
;)。 -
另外,a 是一个对象实例,因此不能使用 -> 指针表示法。你应该考虑自动指针。最重要的是,printf() 函数是 C,而不是 C++。
-
对不起,它不能工作。 a 不是指针类型,并且你没有重新定义它的 -> 操作符,所以你不能在它上面使用 ->。
标签: c++ function inheritance polymorphism overriding