📅  最后修改于: 2023-12-03 14:39:58.373000             🧑  作者: Mango
在C++中,抽象是指将具体的实现细节隐藏,暴露出可供外部使用的接口。这种编程方式被称为抽象编程,也是面向对象编程的重要特性之一。
在C++中,抽象类是一个不能直接实例化的类。抽象类可以定义纯虚函数,即没有实现的虚函数。一个类如果有纯虚函数,就是抽象类了。抽象类的作用是提供一个接口,实现类必须实现这个接口。
class Shape {
public:
virtual double area() const = 0;
};
上面的代码定义了一个抽象类Shape,它有一个纯虚函数area()。因为它是抽象类,所以不能直接实例化。其他的类可以继承自Shape类,并实现area()函数,以提供具体的实现。
class Circle : public Shape {
public:
Circle(double r) : radius_(r) {}
virtual double area() const {
return 3.14159 * radius_ * radius_;
}
private:
double radius_;
};
class Rectangle : public Shape {
public:
Rectangle(double w, double h) : width_(w), height_(h) {}
virtual double area() const {
return width_ * height_;
}
private:
double width_;
double height_;
};
上面的代码分别定义了两个类Circle和Rectangle,它们都继承了Shape类,并重写了area()函数,提供了具体的实现。
纯虚函数是在抽象类中定义的没有实现的虚函数。它必须在实现类中实现,否则实现类也会变成抽象类。
class Person {
public:
virtual void say() = 0;
};
class Employee : public Person {
public:
virtual void say() {
cout << "I am an employee." << endl;
}
};
上面的代码定义了一个抽象类Person和一个实现类Employee,Employee类继承自Person类并实现了say()函数。
接口是一组函数的集合,用于定义一个类或对象暴露给其他代码使用的方法。通过使用接口,可以隐藏类的实现细节,只暴露所需接口。C++中的接口通常由抽象类实现。
class IShape {
public:
virtual double area() const = 0;
virtual ~IShape() {}
};
class Circle : public IShape {
public:
Circle(double r) : radius_(r) {}
virtual double area() const {
return 3.14159 * radius_ * radius_;
}
private:
double radius_;
};
class Rectangle : public IShape {
public:
Rectangle(double w, double h) : width_(w), height_(h) {}
virtual double area() const {
return width_ * height_;
}
private:
double width_;
double height_;
};
上面的代码定义了一个接口IShape和两个实现类Circle和Rectangle,它们分别实现了IShape接口的area()函数。其他类可以使用IShape接口,只需要调用area()函数即可。
抽象是C++中的一个重要特性,它可以帮助我们隐藏实现细节,提供可供其他代码使用的接口。在C++中,抽象通常由抽象类和纯虚函数实现。使用抽象编程可以提高代码的可读性、可维护性和可扩展性。