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++也没有规定虚函数一定要定义吧。
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是纯虚函数,可以不要函数的实现部分,而虚函数则不然
一楼的正解