C++抽象類如何理解

c++
小樊
81
2024-11-09 04:34:33

在C++中,抽象類是一種不能被實(shí)例化的類,也就是說(shuō)我們不能直接創(chuàng)建抽象類的對(duì)象。抽象類通常被用作基類,來(lái)定義接口和實(shí)現(xiàn)一些通用的功能,然后由其他類繼承并實(shí)現(xiàn)抽象類中未實(shí)現(xiàn)的方法。

抽象類通常包含一個(gè)或多個(gè)純虛函數(shù)。純虛函數(shù)是在基類中聲明的虛函數(shù),它沒(méi)有定義具體的實(shí)現(xiàn),而是用= 0來(lái)表示。派生類必須實(shí)現(xiàn)這些純虛函數(shù),否則它們也將成為抽象類,無(wú)法被實(shí)例化。

下面是一個(gè)簡(jiǎn)單的抽象類示例:

#include <iostream>
using namespace std;

// 抽象類 Shape
class Shape {
public:
    // 構(gòu)造函數(shù)
    Shape() {
        cout << "Shape 構(gòu)造函數(shù)被調(diào)用" << endl;
    }

    // 虛析構(gòu)函數(shù)
    virtual ~Shape() {
        cout << "Shape 析構(gòu)函數(shù)被調(diào)用" << endl;
    }

    // 純虛函數(shù),計(jì)算面積
    virtual double area() const = 0;
};

// 派生類 Circle,繼承自 Shape
class Circle : public Shape {
public:
    // 構(gòu)造函數(shù)
    Circle(double radius) : radius_(radius) {
        cout << "Circle 構(gòu)造函數(shù)被調(diào)用" << endl;
    }

    // 析構(gòu)函數(shù)
    ~Circle() {
        cout << "Circle 析構(gòu)函數(shù)被調(diào)用" << endl;
    }

    // 實(shí)現(xiàn)純虛函數(shù) area
    double area() const override {
        return 3.14 * radius_ * radius_;
    }

private:
    double radius_;
};

int main() {
    // 由于 Shape 是抽象類,無(wú)法實(shí)例化對(duì)象
    // Shape shape; // 錯(cuò)誤

    // 創(chuàng)建一個(gè)指向抽象類的指針,指向派生類對(duì)象
    Shape* shape = new Circle(5.0);

    // 調(diào)用 area 函數(shù)
    cout << "圓的面積: " << shape->area() << endl;

    // 釋放內(nèi)存
    delete shape;

    return 0;
}

在這個(gè)例子中,我們定義了一個(gè)抽象類Shape,它包含一個(gè)純虛函數(shù)area()。然后我們定義了一個(gè)派生類Circle,繼承自Shape,并實(shí)現(xiàn)了area()函數(shù)。在main()函數(shù)中,我們創(chuàng)建了一個(gè)指向Shape的指針,指向Circle對(duì)象,并調(diào)用了area()函數(shù)。注意,我們不能創(chuàng)建Shape類的對(duì)象,因?yàn)樗且粋€(gè)抽象類。

0