溫馨提示×

C++抽象類如何使用

c++
小樊
81
2024-11-09 04:31:35
欄目: 編程語言

在C++中,抽象類是一種不能被實(shí)例化的類,它通常用作基類,以便為派生類提供一個(gè)公共的接口和一些通用的功能

  1. 定義抽象類: 首先,您需要定義一個(gè)包含純虛函數(shù)的抽象類。純虛函數(shù)是在基類中聲明的虛函數(shù),但在函數(shù)體中沒有實(shí)現(xiàn)。派生類必須提供這些純虛函數(shù)的實(shí)現(xiàn)。
#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;
};
  1. 創(chuàng)建派生類: 接下來,您可以創(chuàng)建一個(gè)或多個(gè)從抽象類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_;
};
  1. 使用抽象類和派生類: 現(xiàn)在,您可以創(chuàng)建一個(gè)指向抽象類的指針或引用,并使用它來操作派生類的對象。這是因?yàn)樵贑++中,多態(tài)性允許我們通過基類指針或引用調(diào)用派生類的成員函數(shù)。
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)用了areaperimeter函數(shù),這些函數(shù)在Circle類中有具體的實(shí)現(xiàn)。這就是C++抽象類的使用方法。

0