Pertama, mari perkenalkan poin pengetahuan baru kita— fungsi virtual .
Fungsi macam apa ini? Sederhananya, ini adalah fungsi yang dideklarasikan dengan virtual di depan suatu fungsi. Bentuk umumnya adalah sebagai berikut:
fungsi virtual nilai balik nama fungsi (parameter formal) {isi fungsi}
Jadi untuk apa itu digunakan? Munculnya fungsi virtual memungkinkan hubungan antara fungsi dan badan fungsi dibuat pada saat runtime, yang disebut pengikatan dinamis . Kemudian ketika kelas turunan dari fungsi virtual sedang berjalan, efek mengeksekusi metode yang sama tetapi dengan hasil yang berbeda dapat dicapai sesuai dengan pengikatan dinamis pada saat runtime, yang disebut polimorfisme. Dengan demikian, ada cara untuk menyelesaikan masalah pada bagian sebelumnya.
Selanjutnya, kita hanya perlu mendeklarasikan metode area di kelas dasar sebagai fungsi virtual, lalu penunjuk atau referensi apa pun bertipe Titik di fungsi utama dapat dipanggil dengan berani, dan tidak perlu khawatir tentang masalah tipe. Karena mereka akan memutuskan metode mana yang akan dipanggil berdasarkan tipe objek sebenarnya untuk mencapai pengikatan dinamis.
Kodenya adalah sebagai berikut:
/***************************************//Des: Demo tutorial C++ //Penulis: Huang/ /Hak Cipta:www.dotcpp.com//Tanggal:2017/12/20********************************* *** *******/#include<iostream>usingnamespacestd;#definePI3.1415926classPoint{private:intx,y;public:Point(intx=0,inty=0){this->x=x;ini ->y =y;}virtualdoublearea(){return0.0;}};classCircle:publicPoint{private:intr;public:Circle(intx,inty,intR):Point(x,y){r=R;}doublearea (){ returnPI*r*r;}};intmain(){PointA(10,10);cout<<A.area()<<endl;CircleB(10,10,20);cout<<B.area ()< <endl;Titik*p;p=&B;cout<<p->area()<<endl;Titik&pp=B;cout<<pp.area()<<endl;return0;}
Setelah modifikasi, kompilasi dan jalankan sebagai berikut:
Silakan bereksperimen di komputer Anda sendiri untuk merasakan peran fungsi virtual dan polimorfisme.
Hal yang perlu diperhatikan adalah:
1. Fungsi virtual tidak bisa menjadi fungsi anggota statis atau fungsi teman karena tidak termasuk dalam suatu objek.
2. Fungsi inline tidak dapat menentukan lokasinya secara dinamis selama runtime. Meskipun fungsi virtual didefinisikan di dalam kelas, fungsi tersebut akan tetap dianggap sebagai non-inline selama kompilasi.
3. Konstruktor tidak dapat berupa fungsi virtual, dan destruktor dapat berupa fungsi virtual, dan biasanya dideklarasikan sebagai fungsi virtual.