我有简单的程序
#include <iostream>
using namespace std;
struct A
{
A(){}
void print(int i)
{
cout << "A::print: " << i << endl;
}
};
struct B : public A
{
B() : A() {}
virtual void print(int i) {};
};
struct C : public B
{
C() : B() {}
virtual void print(int i)
{
cout << "C::print: " << i << endl;
}
};
void main()
{
A* ca = new C();
C* cc = new C();
ca->print(1);
cc->print(1);
}
我无法理解为什么我的编译器(msvc2008)没有显示任何警告。也许我不懂虚函数的机制?实际上,我们错误地重新定义了方法,这取决于使用的指针
答案 0 :(得分:1)
实际上,我们错误地重新定义了方法,这取决于使用的指针
它只是&#34;错误&#34;根据你的意图,编译器无法知道。
编写的代码完全有效。虚拟发货是选择加入的,您还没有选择加入。
答案 1 :(得分:1)
A类将print
定义为非虚拟且允许的。
这里没有警告,它是有效的代码。您说A的打印不是虚拟的,必须执行的功能是A::print