Rumah pembangunan bahagian belakang C++ Bagaimanakah polimorfisme berinteraksi dengan lebihan fungsi dalam C++?

Bagaimanakah polimorfisme berinteraksi dengan lebihan fungsi dalam C++?

Jun 05, 2024 pm 06:03 PM
kelebihan beban fungsi Polimorfisme

Polymorphism dan overloading fungsi berinteraksi: cipta fungsi terlebih beban dalam kelas asas, dan takrifkan semula versi fungsi ini dalam kelas terbitan. Penunjuk atau rujukan kelas induk boleh menunjuk ke objek subkelas dan memanggil kaedah yang berbeza mengikut jenis objek sebenar. Dalam kod sampel, kelas asas Shape mengisytiharkan kawasan() fungsi maya tulen, dan kelas terbitan Rectangle dan Circle mentakrifkan semula kaedah kawasan() untuk mengira kawasan masing-masing.

C++ 中多态性如何与函数重载相互作用?

Interaksi Polimorfisme dan Lebihan Fungsi dalam C++

Dalam C++, Function Overloading membenarkan penggunaan nama fungsi yang sama untuk mencipta versi fungsi yang berbeza dengan senarai parameter yang berbeza.

Polymorphism membenarkan objek subkelas dirawat dengan jenis kelas induknya. Ini membolehkan kelas induk menunjuk ke penunjuk atau rujukan kepada objek kelas anak, membenarkan kaedah yang berbeza dipanggil bergantung pada jenis objek sebenar.

Apabila polimorfisme dan lebihan fungsi digunakan bersama, adalah mungkin untuk mencipta fungsi terlampau beban dalam kelas asas dan mentakrifkan semula versi fungsi ini dalam kelas terbitan.

Contoh kod:

class Shape {
public:
    virtual double area() = 0;  // 纯虚函数
};

class Rectangle : public Shape {
public:
    Rectangle(double length, double width) : _length(length), _width(width) {}
    double area() override { return _length * _width; }

private:
    double _length, _width;
};

class Circle : public Shape {
public:
    Circle(double radius) : _radius(radius) {}
    double area() override { return 3.14 * _radius * _radius; }

private:
    double _radius;
};

int main() {
    Shape* shapes[] = {
        new Rectangle(4.5, 3.2),
        new Circle(2.5)
    };

    for (Shape* shape : shapes) {
        cout << shape->area() << endl;  // 调用正确的 area() 方法
    }

    return 0;
}
Salin selepas log masuk

Output:

14.4
19.625
Salin selepas log masuk

Dalam contoh ini, kelas asas Shape mengisytiharkan area() fungsi maya tulen. Kelas terbitan Rectangle dan Bulatan mentakrifkan semula kaedah kawasan() untuk mengira kawasannya secara berbeza. Shape 基类声明了一个 area() 纯虚函数。派生类 RectangleCircle 重新定义 area() 方法,以不同的方式计算其面积。

main() 函数创建一个 Shape 指针数组,并将派生类对象存储在其中。循环遍历数组并调用 area()

Fungsi main() mencipta tatasusunan penunjuk Shape dan menyimpan objek kelas terbitan di dalamnya. Gelung melalui tatasusunan dan panggil kaedah area(), memanggil kaedah yang sesuai berdasarkan jenis sebenar objek yang ditunjuk. 🎜

Atas ialah kandungan terperinci Bagaimanakah polimorfisme berinteraksi dengan lebihan fungsi dalam C++?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk membezakan lebihan fungsi dan menulis semula dalam C++ Bagaimana untuk membezakan lebihan fungsi dan menulis semula dalam C++ Apr 19, 2024 pm 04:21 PM

Kelebihan beban fungsi membenarkan fungsi dengan nama yang sama tetapi tandatangan berbeza dalam kelas, manakala mengatasi fungsi berlaku dalam kelas terbitan apabila ia mengatasi fungsi dengan tandatangan yang sama dalam kelas asas, memberikan tingkah laku yang berbeza.

Lebih memuatkan dan menulis semula fungsi PHP Lebih memuatkan dan menulis semula fungsi PHP Apr 26, 2024 pm 05:12 PM

Kelebihan beban dan penulisan semula fungsi disokong dalam PHP untuk mencipta kod yang fleksibel dan boleh digunakan semula. Kelebihan beban fungsi: membenarkan penciptaan fungsi dengan nama yang sama tetapi parameter berbeza, dan memanggil fungsi yang paling sesuai berdasarkan padanan parameter. Penulisan semula fungsi: Benarkan subkelas mentakrifkan fungsi dengan nama yang sama dan mengatasi kaedah kelas induk Apabila kaedah subkelas dipanggil, ia akan mengatasi kaedah kelas induk.

Bagaimana untuk melaksanakan lebihan fungsi dalam golang? Bagaimana untuk melaksanakan lebihan fungsi dalam golang? Apr 29, 2024 pm 05:21 PM

Bahasa Go tidak menyokong lebihan fungsi tradisional, tetapi kesan serupa boleh dicapai melalui kaedah berikut: menggunakan fungsi bernama: mencipta nama unik untuk fungsi dengan parameter yang berbeza atau jenis pulangan menggunakan generik (Go1.18 dan ke atas): mencipta nama unik untuk pelbagai jenis parameter Satu versi fungsi.

Bagaimanakah warisan dan polimorfisme mempengaruhi gandingan kelas dalam C++? Bagaimanakah warisan dan polimorfisme mempengaruhi gandingan kelas dalam C++? Jun 05, 2024 pm 02:33 PM

Pewarisan dan polimorfisme mempengaruhi gandingan kelas: Pewarisan meningkatkan gandingan kerana kelas terbitan bergantung pada kelas asas. Polimorfisme mengurangkan gandingan kerana objek boleh bertindak balas kepada mesej secara konsisten melalui fungsi maya dan penunjuk kelas asas. Amalan terbaik termasuk menggunakan warisan dengan berhati-hati, menentukan antara muka awam, mengelakkan penambahan ahli data pada kelas asas dan menyahgandingkan kelas melalui suntikan kebergantungan. Contoh praktikal yang menunjukkan cara menggunakan polimorfisme dan suntikan pergantungan untuk mengurangkan gandingan dalam aplikasi akaun bank.

Amalan terbaik untuk kelebihan beban fungsi C++ Amalan terbaik untuk kelebihan beban fungsi C++ Apr 20, 2024 am 10:48 AM

Amalan terbaik untuk lebihan fungsi C++: 1. Gunakan nama yang jelas dan bermakna 2. Elakkan terlalu banyak beban 3. Pertimbangkan parameter lalai 5. Gunakan SFINAE.

Apakah batasan dan pertimbangan untuk kelebihan beban fungsi C++? Apakah batasan dan pertimbangan untuk kelebihan beban fungsi C++? Apr 13, 2024 pm 01:09 PM

Sekatan ke atas lebihan fungsi termasuk: jenis dan pesanan parameter mestilah berbeza (apabila bilangan parameter adalah sama), dan parameter lalai tidak boleh digunakan untuk membezakan lebihan muatan. Selain itu, fungsi templat dan fungsi bukan templat tidak boleh dibebankan dan fungsi templat dengan spesifikasi templat yang berbeza boleh dibebankan. Perlu diingat bahawa penggunaan lebihan fungsi secara berlebihan boleh menjejaskan kebolehbacaan dan penyahpepijatan, dengan pengkompil mencari daripada fungsi yang paling khusus kepada yang paling kurang khusus untuk menyelesaikan konflik.

Apakah senario aplikasi kelebihan beban fungsi C++ dalam projek sebenar? Apakah senario aplikasi kelebihan beban fungsi C++ dalam projek sebenar? Apr 26, 2024 pm 01:57 PM

Lebihan beban fungsi membolehkan fungsi dengan nama yang sama ditakrifkan secara berbeza dalam C++, mengendalikan jenis argumen yang berbeza atau melaksanakan operasi yang berbeza. Senario aplikasi khusus termasuk: memproses jenis data yang berbeza untuk menyediakan fungsi yang berbeza untuk meningkatkan kebolehbacaan kod

Adakah lebihan fungsi C++ dikenakan kepada pembina dan pemusnah? Adakah lebihan fungsi C++ dikenakan kepada pembina dan pemusnah? Apr 14, 2024 am 09:03 AM

Pembina C++ menyokong beban berlebihan, tetapi pemusnah tidak. Pembina boleh mempunyai senarai parameter yang berbeza, manakala pemusnah hanya boleh mempunyai senarai parameter kosong kerana ia dipanggil secara automatik apabila memusnahkan contoh kelas tanpa parameter input.

See all articles