在C++中,純虛函數是一種特殊的虛函數,它在基類中沒有定義具體的實現,而是用= 0
表示。派生類必須提供純虛函數的具體實現,否則它們也將成為抽象類,無法實例化。設計純虛函數時,需要考慮以下幾點:
class Shape {
public:
virtual double area() const = 0; // 純虛函數
virtual double perimeter() const = 0; // 純虛函數
virtual ~Shape() {} // 虛析構函數,以確保正確的析構派生類對象
};
class Circle : public Shape {
public:
Circle(double radius) : radius_(radius) {}
double area() const override {
return 3.14159 * radius_ * radius_;
}
double perimeter() const override {
return 2 * 3.14159 * radius_;
}
private:
double radius_;
};
class Rectangle : public Shape {
public:
Rectangle(double width, double height) : width_(width), height_(height) {}
double area() const override {
return width_ * height_;
}
double perimeter() const override {
return 2 * (width_ + height_);
}
private:
double width_;
double height_;
};
class Shape {
public:
virtual ~Shape() {} // 虛析構函數,以確保正確的析構派生類對象
virtual double area() const = 0; // 純虛函數
virtual double perimeter() const = 0; // 純虛函數
};
總之,設計C++純虛函數時,需要考慮接口設計、擴展性和使用接口和抽象類。這樣可以確保代碼的可維護性、可擴展性和易用性。