📅  最后修改于: 2023-12-03 14:39:58.836000             🧑  作者: Mango
在C++中,纯虚函数和抽象类是面向对象编程的两个重要概念。
抽象类是具有纯虚函数的类。纯虚函数是一个没有实际实现的函数,它的实现由派生类提供。抽象类的作用是提供一个接口,用于定义一组派生类共有的方法。因为抽象类中包含纯虚函数,所以它不能被实例化,只能用于派生其他类。
class Shape {
public:
virtual void area() = 0; // 纯虚函数
}
class Rectangle : public Shape {
public:
void area() {
// 求矩形面积的具体实现
}
}
class Circle : public Shape {
public:
void area() {
// 求圆形面积的具体实现
}
}
在上面的例子中,Shape
是一个抽象类,它包含一个纯虚函数area()
,派生类必须实现它。Rectangle
和Circle
是Shape
的派生类,它们分别实现了area()
方法。
抽象类的作用是提供一个接口,用于描述一组类所具有的共同属性和行为。它可以实现多态,让不同的对象以相同的方式处理。它还可以做到程序的前后分离,提高程序的可维护性和可扩展性。
假设我们正在开发一个图形计算器,它可以计算不同图形的面积和周长。我们可以使用抽象类来定义一组公共接口,然后派生出不同的图形类。
#include <iostream>
using namespace std;
class Shape {
public:
virtual void print() = 0;
virtual double area() = 0;
virtual double perimeter() = 0;
};
class Rectangle : public Shape {
private:
double width;
double height;
public:
Rectangle(double w, double h) : width(w), height(h) {}
void print() {
cout << "Rectangle(" << width << ", " << height << ")" << endl;
}
double area() {
return width * height;
}
double perimeter() {
return 2 * (width + height);
}
};
class Circle : public Shape {
private:
double radius;
public:
Circle(double r) : radius(r) {}
void print() {
cout << "Circle(" << radius << ")" << endl;
}
double area() {
return 3.14 * radius * radius;
}
double perimeter() {
return 2 * 3.14 * radius;
}
};
int main() {
Shape* s1 = new Rectangle(10, 20);
Shape* s2 = new Circle(5);
s1->print();
cout << "Area = " << s1->area() << endl;
cout << "Perimeter = " << s1->perimeter() << endl;
s2->print();
cout << "Area = " << s2->area() << endl;
cout << "Perimeter = " << s2->perimeter() << endl;
delete s1;
delete s2;
return 0;
}
在上面的示例中,我们定义了一个抽象类Shape
,它包含了三个纯虚函数print()
、area()
和perimeter()
,这三个函数分别用于打印图形的信息、计算图形的面积和周长。然后我们派生出Rectangle
和Circle
类,它们分别实现了这三个函数。最后我们在main()
函数中创建了两个对象s1
和s2
,然后调用它们的print()
、area()
和perimeter()
方法。
抽象类和纯虚函数是C++中的两个重要概念,它们可以用于定义一组类所具有的共同属性和行为。抽象类的作用是提供一个接口,用于描述这组公共属性和行为,它不能被实例化,只能用于派生其他类。纯虚函数是一个没有实际实现的函数,它的实现由派生类提供。使用抽象类和纯虚函数可以实现多态和前后分离,提高程序的可维护性和可扩展性。