Rumah >pembangunan bahagian belakang >C++ >Fungsi Maya C++ dan Kelas Asas Abstrak: Meneroka Asas Pengaturcaraan Polimorfik

Fungsi Maya C++ dan Kelas Asas Abstrak: Meneroka Asas Pengaturcaraan Polimorfik

WBOY
WBOYasal
2024-04-28 11:30:02416semak imbas

Dalam C++, polimorfisme dicapai melalui fungsi maya dan kelas asas abstrak. Fungsi maya membenarkan fungsi kelas asas ditindih dalam kelas terbitan, manakala kelas asas abstrak mengandungi fungsi maya tulen, memaksa kelas terbitan menyediakan pelaksanaan. Ini membolehkan pengaturcaraan polimorfik dengan menggunakan penuding kelas asas untuk mengakses objek kelas terbitan dan memanggil kaedah yang sesuai berdasarkan jenis sebenar objek. . Dalam C++, kami menggunakan fungsi maya dan kelas asas abstrak untuk mencapai polimorfisme.

Fungsi MayaC++ 虚拟函数与抽象基类:探究多态编程的基础

Definisi:

Fungsi maya ialah fungsi ahli yang diisytiharkan dalam kelas asas tetapi dilaksanakan hanya dalam kelas terbitan. Apabila fungsi maya dipanggil melalui penuding kelas asas, pelaksanaan kelas terbitan dipanggil.

Sintaks:

class Base {
public:
    virtual void print() const;
};

class Derived : public Base {
public:
    virtual void print() const override;
};

override kata kunci menunjukkan bahawa kami mengatasi fungsi maya kelas asas.

Kelas asas abstrak

Definisi: Kelas asas abstrak ialah kelas asas yang mengandungi sekurang-kurangnya satu fungsi maya tulen. Fungsi maya tulen tidak ditakrifkan dan hanya dilaksanakan oleh kelas terbitan.

Sintaks: override 关键字表明我们正在覆盖基类的虚拟函数。

抽象基类

定义:抽象基类是至少包含一个纯虚函数的基类。纯虚函数没有定义,仅由派生类实现。

语法:

class Base {
public:
    virtual void f() const = 0;
};

实战案例:形状类层次

考虑一个形状层次结构,其中每个形状类都具有计算其面积的 area()

class Shape {
public:
    virtual double area() const = 0;
};

Contoh Praktikal: Hierarki Kelas BentukPertimbangkan hierarki bentuk di mana setiap kelas bentuk mempunyai kaedah kawasan() yang mengira kawasannya.

Bentuk kelas asas:

class Circle : public Shape {
public:
    Circle(double radius) : _radius(radius) {}

    double area() const override {
        return M_PI * _radius * _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;
    }

private:
    double _width, _height;
};

Kelas terbitan Bulatan dan Segi Empat:

int main() {
    Shape* s1 = new Circle(5);
    Shape* s2 = new Rectangle(3, 4);

    std::cout << "Circle area: " << s1->area() << std::endl;
    std::cout << "Rectangle area: " << s2->area() << std::endl;

    return 0;
}

Fungsi utama:

Circle area: 78.5398
Rectangle area: 12
    Keluaran: membolehkan akses polimorfik kepada objek kelas terbitan
  • Tingkatkan kod kebolehgunaan semula dan kebolehskalaan
  • Penyahgandingan dan penyelenggaraan kod sokongan

Atas ialah kandungan terperinci Fungsi Maya C++ dan Kelas Asas Abstrak: Meneroka Asas Pengaturcaraan Polimorfik. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn