虚函数和纯虚函数区别 请举实例说明
时间: 2023-05-31 22:07:08 浏览: 105
虚函数是在基类中声明的,用virtual关键字修饰的成员函数,它在派生类中可以被重写,并且在运行时会根据实际对象类型调用相应的函数。
纯虚函数是在基类中声明的,没有实现的虚函数,用纯虚函数标识符“=0”表示。它没有实际的实现,不能被直接调用,只能用于派生类中实现。其目的是为了强制派生类必须实现该函数。如果派生类没有实现该函数,则编译会报错。
例如:
```
class Shape {
public:
virtual void draw() { }
virtual void print() = 0;
};
class Circle : public Shape {
public:
void draw() override {
cout << "Draw circle." << endl;
}
void print() override {
cout << "Print circle." << endl;
}
};
int main() {
Shape* shape = new Circle();
shape->draw();
shape->print();
return 0;
}
```
在上述代码中,Shape类中有一个虚函数draw()和一个纯虚函数print()。Circle类继承自Shape类,并重写了draw()和实现了print()。在main函数中创建Circle对象,并通过指向基类的指针调用它们的虚函数。虚函数draw()被调用时,会根据实际对象类型调用Circle类中的实现;纯虚函数print()被调用时,必须通过Circle类中的实现来调用,否则编译会报错。
阅读全文