您好,登錄后才能下訂單哦!
今天小編給大家分享一下PHP多態(tài)性和虛函數(shù)實(shí)例分析的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
給出以下程序的執(zhí)行結(jié)果。
#include <iostream> class A { public: virtual void f() //虛函數(shù) { cout << "A::f() called." << endl; } }; class B:public A { public: virtual void f() //虛函數(shù) { cout << "B::f() called." << endl; } }; void main(){ B b; void (A::*pf)()=A::f; (b.*pf)(); }答
B::f() called.
給出以下程序的執(zhí)行結(jié)果
#include <iostream.h> class A { public: virtual void disp() //虛函數(shù) { cout << "Base class A." << endl; } }; class B:public A { public: virtual void disp() //虛函數(shù) { cout << "Derived class B." << endl; } }; class C:public A { public: virtual void disp() //虛函數(shù) { cout << "Derived class C." << endl; } }; void main(){ A *ptr; A a; B b; C c; ptr=&a; ptr->disp(); ptr=&b; ptr->disp(); ptr=&c; }答:
Base class A. Derived class B. Derived class C.
分析以下程序的錯(cuò)誤并改正
#include <iostream.h> class A { int x; public: A(int i) { x=i; } void dispa() { cout << "x=" << x << endl; } }; class B : public A { int y; public: B(int i,int j):A(i) { y=j; } void dispb() { cout << "y=" << y << endl; } }; void main() { A *p,a(1); B b(2,3); p=&a; p->dispa(); p=&b; p->dispb(); }答:程序中說明了類A和派生類B,在main()中定義了類A對象指針p,先讓p指向類A的對象a,執(zhí)行p->dispa(),再讓p指向類B的對象b,執(zhí)行p->dispb()。由于這里采用的是靜態(tài)聯(lián)編方式,通過指針p只能調(diào)用類A的成員函數(shù),而類A中沒有dispb()成員函數(shù),所以出錯(cuò),編譯時(shí)的錯(cuò)誤信息如下:
error C2039: 'dispb' : is not a member of 'A'改正的方法是將相關(guān)的成員函數(shù)改為虛函數(shù),程序如下:
#include <iostream.h> class A { int x; public: A(int i) { x=i; } virtual void disp() //虛函數(shù) { cout << "x=" << x << endl; } }; class B : public A { int y; public: B(int i,int j):A(i) { y=j; } void disp() { cout << "y=" << y << endl; } }; void main() { A *p,a(1); B b(2,3); p=&a; p->disp(); p=&b; p->disp(); }程序執(zhí)行結(jié)果如下:
x=1 y=3
設(shè)計(jì)一個(gè)評(píng)選優(yōu)秀教師和學(xué)生的程序,其類結(jié)構(gòu)如下圖所示。當(dāng)輸入一系列教師或?qū)W生的記錄后,將優(yōu)秀學(xué)生及教師的姓名列出來,并采用相關(guān)數(shù)據(jù)進(jìn)行測試。
解析:設(shè)計(jì)一個(gè)基類base,含純虛函數(shù)isgood(),由base類派生出類student和類teacher,分別包含純虛函數(shù)針對學(xué)生和教師為優(yōu)秀的定義。對應(yīng)的程序如下:
#include <iostream> #include <stdio.h> using namespace std; enum boolean {False,True}; class base { protected: char name[8]; public: void getname() { cout << " 姓名:"; cin >> name; } void printname() { cout << " 姓名:" << name << endl; } virtual boolean isgood()=0; //純虛函數(shù) }; class student : public base { int num; public: void getnum() { cout << " 考試成績:";cin >> num; } boolean isgood() { return (num>90) ? True:False; } }; class teacher:public base { int num; public: void getnum() { cout << " 每年發(fā)表論文數(shù):";cin >> num; } boolean isgood() { return (num>3) ? True:False; } }; int main() { base *p[50]; student *pstud; teacher *ptech; char ch; int count=0; do { cout << "輸入教師(t)或?qū)W生(s):"; cin>> ch; if (ch=='s') { pstud=new student; pstud->getname(); pstud->getnum(); p[count++]=pstud; } else if (ch=='t') { ptech=new teacher; ptech->getname(); ptech->getnum(); p[count++]=ptech; } else cout << "輸入錯(cuò)誤" << endl; cout << "繼續(xù)輸入嗎(y/n)?"; cin >> ch; } while (ch=='y'); cout << "優(yōu)秀學(xué)生或教師" << endl; for (int i=0;i<count;i++) if (p[i]->isgood()==True) //若為優(yōu)秀,則輸出之 p[i]->printname(); return 0; }
以上就是“PHP多態(tài)性和虛函數(shù)實(shí)例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。