溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

PHP多態(tài)性和虛函數(shù)實(shí)例分析

發(fā)布時(shí)間:2022-04-06 16:22:20 來源:億速云 閱讀:130 作者:iii 欄目:編程語言

今天小編給大家分享一下PHP多態(tài)性和虛函數(shù)實(shí)例分析的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

理論練習(xí)題 
  • 給出以下程序的執(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
上機(jī)實(shí)習(xí)題
題目

設(shè)計(jì)一個(gè)評(píng)選優(yōu)秀教師和學(xué)生的程序,其類結(jié)構(gòu)如下圖所示。當(dāng)輸入一系列教師或?qū)W生的記錄后,將優(yōu)秀學(xué)生及教師的姓名列出來,并采用相關(guān)數(shù)據(jù)進(jìn)行測試。

PHP多態(tài)性和虛函數(shù)實(shí)例分析

解析:設(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è)資訊頻道。

向AI問一下細(xì)節(jié)

免責(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)容。

php
AI