面试题答案
一键面试- 定义抽象类:
在C++ 中,包含至少一个纯虚函数的类被称为抽象类。纯虚函数是在声明时初始化为
= 0
的虚函数。例如:
class Shape {
public:
// 纯虚函数
virtual double area() const = 0;
};
这里 Shape
类就是一个抽象类,因为它包含了纯虚函数 area
。
-
纯虚函数的作用:
- 定义接口:纯虚函数为派生类提供了一个统一的接口,强制派生类去实现这个函数,以确保不同派生类具有一致的行为定义。
- 阻止实例化:包含纯虚函数的类(即抽象类)不能被实例化,只能作为基类被派生类继承,从而使代码结构更加清晰和合理,体现了面向对象编程中的抽象概念。
-
使用场景举例: 假设有一个图形绘制的程序,需要绘制不同的图形(如圆形、矩形等)。可以定义一个抽象的
Shape
类作为基类,其中包含纯虚函数draw
用于绘制图形,每个具体的图形类(如Circle
和Rectangle
)继承自Shape
类并实现draw
函数。
class Shape {
public:
virtual void draw() const = 0;
};
class Circle : public Shape {
private:
double radius;
public:
Circle(double r) : radius(r) {}
void draw() const override {
std::cout << "Drawing a circle with radius " << radius << std::endl;
}
};
class Rectangle : public Shape {
private:
double width;
double height;
public:
Rectangle(double w, double h) : width(w), height(h) {}
void draw() const override {
std::cout << "Drawing a rectangle with width " << width << " and height " << height << std::endl;
}
};
在使用时,可以通过 Shape
指针或引用来操作不同的具体图形对象:
#include <iostream>
#include <vector>
int main() {
std::vector<Shape*> shapes;
shapes.push_back(new Circle(5.0));
shapes.push_back(new Rectangle(4.0, 6.0));
for (const auto& shape : shapes) {
shape->draw();
delete shape;
}
return 0;
}
这样通过抽象类和纯虚函数,可以以一种统一的方式处理不同类型的图形对象,提高了代码的可扩展性和可维护性。