c++的虚函数问题

来源:百度知道 编辑:UC知道 时间:2024/07/04 09:40:08
class A {
public:
virtual void op() = 0;
virtual void another() = 0;

};

class B : public A {
public:

void another() {
cout << "ok" << endl;
}
void op() {
another();
}
};

int main()
{
A* a = new B;
a->op();

system("pause");
return 0;
}

为什么把0去掉就不能通过编译了,我用vs2008
其实我就是想知道,为什么一定要定义虚函数才不会报错。c++也没有规定虚函数一定要定义吧。

加上=0之后实际上就是声明了函数为纯虚函数,纯虚函数是不需要有定义的(即函数体),去掉=0之后必须定义函数体,你编译报错应该是unresolved external symbol,只需要加两个空函数体(即{})就可以了
至于说是选择纯虚函数还是虚函数要看具体情况

附加:C++里面的函数声明之后必须要有定义的,否则就会出现上述报错的

加0是纯虚函数,可以不要函数的实现部分,而虚函数则不然

一楼的正解