C++抽象類怎樣創(chuàng)建

c++
小樊
82
2024-11-09 04:26:34
欄目: 編程語言

在C++中,抽象類是一種不能被實(shí)例化的類,它通常包含一個(gè)或多個(gè)純虛函數(shù)。純虛函數(shù)是在基類中聲明的虛函數(shù),但在基類中沒有定義具體的實(shí)現(xiàn)。派生類必須提供這些純虛函數(shù)的實(shí)現(xiàn),否則它們也將成為抽象類。

以下是創(chuàng)建C++抽象類的步驟:

  1. 定義一個(gè)基類,并在其中聲明一個(gè)或多個(gè)純虛函數(shù)。例如:
#include <iostream>

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;
};

在這個(gè)例子中,我們定義了一個(gè)名為Shape的抽象類,它包含一個(gè)純虛函數(shù)area()。

  1. 創(chuàng)建派生類,繼承抽象類,并提供純虛函數(shù)的實(shí)現(xiàn)。例如:
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ù)的實(shí)現(xiàn)
    double area() const override {
        return 3.14159 * radius_ * radius_;
    }

private:
    double radius_;
};

在這個(gè)例子中,我們創(chuàng)建了一個(gè)名為Circle的派生類,它繼承自Shape抽象類,并提供了area()函數(shù)的實(shí)現(xiàn)。

  1. 使用基類指針或引用來操作派生類對(duì)象。例如:
int main() {
    // 由于Shape是抽象類,不能實(shí)例化對(duì)象
    // Shape shape; // 錯(cuò)誤

    // 使用基類指針指向派生類對(duì)象
    Shape* shape = new Circle(5.0);

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

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

    return 0;
}

在這個(gè)例子中,我們使用Shape基類指針指向Circle派生類對(duì)象,并調(diào)用area()函數(shù)。注意,我們不能直接實(shí)例化Shape類,因?yàn)樗且粋€(gè)抽象類。

0