SV中纯虚方法和虚方法的区别
时间: 2024-05-15 07:12:12 浏览: 187
高级验证方法学
4星 · 用户满意度95%
在C++中,虚函数和纯虚函数都是用于实现多态性的机制。虚函数是一个可以被覆盖的函数,而纯虚函数则是一个没有实现的虚函数,需要在子类中被实现。
区别在于:
1. 纯虚函数没有实现,而虚函数有实现。
2. 类中包含纯虚函数的类是抽象类,不能被实例化,而虚函数不会使类成为抽象类。
3. 子类必须实现纯虚函数才能被实例化,而虚函数可以被子类覆盖或不覆盖。
下面是一个示例:
```c++
class Shape {
public:
virtual void draw() { // 虚函数
cout << "Drawing a shape." << endl;
}
virtual void calculateArea() = 0; // 纯虚函数
};
class Circle : public Shape {
public:
void draw() { // 覆盖虚函数
cout << "Drawing a circle." << endl;
}
void calculateArea() { // 实现纯虚函数
cout << "Calculating the area of a circle." << endl;
}
};
int main() {
Shape* s = new Circle();
s->draw(); // 调用Circle中的draw函数
s->calculateArea(); // 调用Circle中的calculateArea函数
return 0;
}
```
在这个示例中,Shape类有一个虚函数draw()和一个纯虚函数calculateArea()。Circle类继承自Shape类,并覆盖了draw()函数和实现了calculateArea()函数。在main()函数中,我们创建了一个指向Circle对象的Shape指针,并调用了它的draw()和calculateArea()函数。由于draw()是虚函数,因此调用了Circle类中的draw()函数;而calculateArea()是纯虚函数,必须在Circle类中被实现,否则Circle类也会成为抽象类。
阅读全文