Pelaksanaan polimorfisme C++ dan analisis masalah biasa

PHPz
Lepaskan: 2023-10-09 13:28:41
asal
1404 orang telah melayarinya

Pelaksanaan polimorfisme C++ dan analisis masalah biasa

Analisis pelaksanaan dan masalah biasa polimorfisme C++

Pengenalan:
Polymorphism ialah aspek bahasa pengaturcaraan berorientasikan objek yang penting ciri, juga digunakan secara meluas dalam C++. Polimorfisme membolehkan pelbagai jenis objek diproses dengan cara yang sama, meningkatkan fleksibiliti dan kebolehselenggaraan kod. Artikel ini akan memperkenalkan cara polimorfisme dilaksanakan dalam C++ dan menganalisis isu polimorfisme biasa.

1. Cara melaksanakan polimorfisme

  1. Fungsi Maya
    Fungsi maya adalah asas polimorfisme dalam C++. Dengan mengisytiharkan fungsi ahli kelas asas sebagai fungsi maya, anda boleh mengatasinya dalam kelas terbitan. Apabila fungsi maya dipanggil melalui penunjuk atau rujukan kepada objek kelas asas, fungsi dalam kelas terbitan sebenarnya dilaksanakan. Berikut ialah contoh kod:
class Shape{
public:
    virtual void draw() {
        cout << "This is a shape." << endl;
    }
};

class Circle : public Shape{
public:
    void draw() {
        cout << "This is a circle." << endl;
    }
};

class Rectangle : public Shape{
public:
    void draw() {
        cout << "This is a rectangle." << endl;
    }
};

int main(){
    Shape* shape = new Circle();
    shape->draw();  // 输出 "This is a circle."
    
    shape = new Rectangle();
    shape->draw();  // 输出 "This is a rectangle."
    
    delete shape;
    return 0;
}
Salin selepas log masuk
  1. Fungsi Maya Tulen dan Kelas Abstrak
    Fungsi maya tulen merujuk kepada fungsi maya kelas asas A diisytiharkan tetapi tidak dilaksanakan dan ditandakan dengan "= 0". Fungsi maya tulen hanya digunakan untuk pelaksanaan dalam kelas terbitan, kelas asas tidak boleh membuat instantiate objek. Dalam C++, kelas yang mengandungi fungsi maya tulen dipanggil kelas abstrak. Kelas abstrak tidak boleh digunakan secara langsung dan hanya boleh digunakan dan digunakan melalui kelas terbitan. Berikut ialah kod contoh:
class Shape{
public:
    virtual void draw() = 0;
};

class Circle : public Shape{
public:
    void draw() {
        cout << "This is a circle." << endl;
    }
};

class Rectangle : public Shape{
public:
    void draw() {
        cout << "This is a rectangle." << endl;
    }
};

int main(){
    Shape* shape = new Circle();
    shape->draw();  // 输出 "This is a circle."
    
    shape = new Rectangle();
    shape->draw();  // 输出 "This is a rectangle."
    
    delete shape;
    return 0;
}
Salin selepas log masuk

2 Analisis masalah biasa

  1. Isu jenis penunjuk
    Apabila menggunakan polimorfisme, Diperlukan. untuk memberi perhatian kepada isu jenis penunjuk. Memandangkan objek kelas terbitan boleh diberikan kepada penunjuk atau rujukan yang menunjuk kepada objek kelas asas, apabila kaedah dipanggil melalui fungsi maya, fungsi yang akan dipanggil akan ditentukan berdasarkan jenis penunjuk. Jika jenis penunjuk tidak betul, fungsi kelas terbitan yang betul tidak akan dipanggil. Berikut ialah contoh:
class Shape{
public:
    virtual void draw(){
        cout << "This is a shape." << endl;
    }
};

class Circle : public Shape{
public:
    void draw(){
        cout << "This is a circle." << endl;
    }
};

class Rectangle : public Shape{
public:
    void draw(){
        cout << "This is a rectangle." << endl;
    }
};

int main(){
    Shape* shape = new Shape();
    shape->draw();  // 输出 "This is a shape."
    
    shape = new Circle();
    shape->draw();  // 输出 "This is a circle."
    
    shape = new Rectangle();
    shape->draw();  // 输出 "This is a rectangle."
    
    delete shape;
    return 0;
}
Salin selepas log masuk
  1. Isu pesanan panggilan
    Dalam polimorfisme, susunan panggilan fungsi maya ditentukan berdasarkan jenis penunjuk atau rujukan sebenar daripada. Jika anda memanggil fungsi maya dalam pembina atau pemusnah, ia mungkin membawa kepada hasil yang tidak dijangka. Ini kerana jenis objek ditentukan apabila pembina atau pemusnah dipanggil, dan panggilan ke fungsi maya adalah berdasarkan operasi tugasan berikutnya. Berikut ialah contoh:
class Shape{
public:
    Shape(){
        draw();  // 虚函数调用
    }
    
    virtual void draw(){
        cout << "This is a shape." << endl;
    }
};

class Circle : public Shape{
public:
    void draw(){
        cout << "This is a circle." << endl;
    }
};

int main(){
    Shape* shape = new Circle();
    shape->draw();  // 输出 "This is a shape." 和 "This is a circle."
    
    delete shape;
    return 0;
}
Salin selepas log masuk

Ringkasan:
Artikel ini memperkenalkan pelaksanaan polimorfisme dalam C++ dan menganalisis isu polimorfisme biasa. Dengan memahami konsep asas dan penggunaan polimorfisme, anda boleh meningkatkan fleksibiliti dan kebolehselenggaraan kod anda dan mengatasi keperluan pembangunan harian dengan lebih baik. Walau bagaimanapun, apabila menggunakan polimorfisme, anda perlu memberi perhatian kepada isu seperti jenis penunjuk dan susunan panggilan untuk mengelakkan hasil yang tidak dijangka. Saya harap artikel ini dapat membantu pembaca lebih memahami dan mengaplikasikan polimorfisme.

Atas ialah kandungan terperinci Pelaksanaan polimorfisme C++ dan analisis masalah biasa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan