在C++中,抽象類是一種不能被實(shí)例化的類,它通常用作基類,以便為派生類提供一個(gè)公共的接口和一些通用的功能
#include <iostream>
// 定義抽象類 Shape
class Shape {
public:
// 構(gòu)造函數(shù)
Shape() {
std::cout << "Shape 構(gòu)造函數(shù)被調(diào)用" << std::endl;
}
// 虛析構(gòu)函數(shù)
virtual ~Shape() {
std::cout << "Shape 析構(gòu)函數(shù)被調(diào)用" << std::endl;
}
// 純虛函數(shù),計(jì)算面積
virtual double area() const = 0;
// 純虛函數(shù),計(jì)算周長
virtual double perimeter() const = 0;
};
Shape
派生的類,并為這些純虛函數(shù)提供實(shí)現(xiàn)。// 定義派生類 Circle,繼承自 Shape
class Circle : public Shape {
public:
// 構(gòu)造函數(shù)
Circle(double radius) : radius_(radius) {
std::cout << "Circle 構(gòu)造函數(shù)被調(diào)用" << std::endl;
}
// 析構(gòu)函數(shù)
~Circle() {
std::cout << "Circle 析構(gòu)函數(shù)被調(diào)用" << std::endl;
}
// 實(shí)現(xiàn)純虛函數(shù) area
double area() const override {
return 3.14159 * radius_ * radius_;
}
// 實(shí)現(xiàn)純虛函數(shù) perimeter
double perimeter() const override {
return 2 * 3.14159 * radius_;
}
private:
double radius_;
};
int main() {
// 創(chuàng)建一個(gè)指向 Shape 的指針
Shape* shape = nullptr;
// 創(chuàng)建一個(gè)指向 Circle 的對象
Circle circle(5.0);
// 將 Circle 對象的地址賦給 Shape 指針
shape = &circle;
// 通過 Shape 指針調(diào)用 area 和 perimeter 函數(shù)
std::cout << "面積: " << shape->area() << std::endl;
std::cout << "周長: " << shape->perimeter() << std::endl;
return 0;
}
輸出:
Shape 構(gòu)造函數(shù)被調(diào)用
Circle 構(gòu)造函數(shù)被調(diào)用
面積: 78.5398
周長: 31.4159
Shape 析構(gòu)函數(shù)被調(diào)用
Circle 析構(gòu)函數(shù)被調(diào)用
在這個(gè)例子中,我們首先定義了一個(gè)抽象類Shape
,然后創(chuàng)建了一個(gè)從Shape
派生的Circle
類。在main
函數(shù)中,我們創(chuàng)建了一個(gè)指向Shape
的指針,并將一個(gè)Circle
對象的地址賦給了它。然后,我們通過Shape
指針調(diào)用了area
和perimeter
函數(shù),這些函數(shù)在Circle
類中有具體的實(shí)現(xiàn)。這就是C++抽象類的使用方法。