Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Meneroka polimorfisme dalam C++

Meneroka polimorfisme dalam C++

WBOY
WBOYasal
2023-08-21 22:21:231327semak imbas

C++ ialah bahasa yang menyokong pengaturcaraan berorientasikan objek, dan ciri utama pengaturcaraan berorientasikan objek ialah polimorfisme. Polimorfisme merujuk kepada tingkah laku berbeza yang dihasilkan oleh objek berbeza apabila melakukan operasi yang sama. Dalam C++, polimorfisme dicapai melalui lebihan fungsi dan penggunaan fungsi maya. Yang berikut akan meneroka polimorfisme dalam C++ untuk membantu pembaca memahami konsep ini dengan lebih baik.

1. Lebih memuatkan fungsi

Lebih memuatkan fungsi bermakna berbilang fungsi dengan nama yang sama ditakrifkan dalam skop yang sama, tetapi jenis parameternya, bilangan parameter atau jenis nilai pulangan adalah berbeza. Dengan cara ini, apabila fungsi dipanggil, pengkompil secara automatik akan memilih untuk memanggil fungsi yang sepadan berdasarkan parameter yang diluluskan. Contohnya:

void print(int a){
    cout<<"int: "<<a<<endl;
}

void print(double b){
    cout<<"double: "<<b<<endl;
}

int main(){
    print(10); //调用print(int a)函数
    print(3.14); //调用print(double b)函数
    return 0;
}

Cetakan fungsi dibebankan dan ditakrifkan masing-masing untuk jenis int dan jenis dua parameter. Apabila fungsi cetakan dipanggil dalam fungsi utama, pengkompil memilih fungsi yang sepadan untuk dipanggil berdasarkan jenis parameter yang diluluskan. Ini adalah contoh polimorfisme yang dicapai melalui kelebihan beban fungsi.

2. Fungsi maya

Fungsi maya ialah fungsi yang ditakrifkan dalam kelas induk, yang boleh digantikan oleh subkelas. Takrifkan fungsi sebagai jenis maya dalam kelas asas Apabila subkelas mewarisi fungsi, ia juga perlu ditakrifkan sebagai fungsi maya Nama fungsi dan parameter mestilah sama. Pada masa larian, fungsi maya diikat secara dinamik mengikut jenis objek berjalan sebenar untuk mencapai polimorfisme. Contohnya:

class Shape{
public:
    virtual void area(){ //定义虚函数area
        cout<<"This is a shape"<<endl;
    }
};

class Circle:public Shape{
public:
    void area(){//重写虚函数area
        cout<<"This is a circle"<<endl;
    }
};

class Rectangle:public Shape{
public:
    void area(){//重写虚函数area
        cout<<"This is a rectangle"<<endl;
    }
};

int main(){
    Shape *shape;
    Circle circle;
    Rectangle rectangle;
    shape = &circle;
    shape->area();//调用circle类中的虚函数area
    shape = &rectangle;
    shape->area();//调用rectangle类中的虚函数area
    return 0;
}

Dalam kod di atas, kelas Shape ditakrifkan, yang mengandungi kawasan fungsi maya. Kelas Circle dan Rectangle mewarisi kelas Shape dan tulis semula kawasan fungsi maya di dalamnya. Dalam fungsi utama, penunjuk kepada jenis Bentuk ditakrifkan, diberikan kepada alamat objek Bulatan dan objek Rectangle, dan fungsi kawasan dipanggil masing-masing. Memandangkan fungsi kawasan ialah fungsi maya dan terikat secara dinamik mengikut jenis objek yang sedang berjalan, hasil output masing-masing ialah "Ini adalah bulatan" dan "Ini adalah segi empat tepat". Ini adalah contoh fungsi maya yang melaksanakan polimorfisme.

3. Fungsi maya tulen

Fungsi maya tulen bermakna badan fungsi fungsi maya kosong, dan subkelas mesti menulis semula fungsi untuk mewarisi kelas. Apabila terdapat fungsi maya tulen dalam kelas asas, kelas itu dipanggil kelas abstrak. Contohnya:

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

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

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

int main(){
    Shape *shape;
    Circle circle;
    Rectangle rectangle;
    shape = &circle;
    shape->area();//调用circle类中的虚函数area
    shape = &rectangle;
    shape->area();//调用rectangle类中的虚函数area
    return 0;
}

Dalam kod di atas, kawasan fungsi maya tulen ditakrifkan dalam kelas Bentuk Bulatan dan Segi Empat mesti mewarisi fungsi ini untuk mewarisi kelas Bentuk, jika tidak ralat kompilasi akan dilaporkan. Dalam fungsi utama, polimorfisme dicapai dengan menunjuk penunjuk kepada objek Bulatan dan Segi Empat.

Ringkasan:

Dapat dilihat bahawa terdapat banyak cara untuk melaksanakan polimorfisme dalam C++, antaranya fungsi lebihan beban dan fungsi maya adalah dua kaedah yang paling biasa digunakan. Dengan melaksanakan polimorfisme, fleksibiliti dan kebolehgunaan semula kod boleh dipertingkatkan dengan sangat baik, dan kod juga lebih mudah dibaca dan diselenggara. Dalam pengaturcaraan sebenar, anda harus memberi tumpuan kepada memahami sifat dan kegunaan polimorfisme, dan menguasai kaedah dan teknik menggunakan polimorfisme, untuk mengukuhkan kebolehan pengaturcaraan anda.

Atas ialah kandungan terperinci Meneroka polimorfisme dalam C++. 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