温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

PHP多态性和虚函数实例分析

发布时间:2022-04-06 16:22:20 来源:亿速云 阅读:140 作者:iii 栏目:编程语言

今天小编给大家分享一下PHP多态性和虚函数实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

理论练习题 
  • 给出以下程序的执行结果。

#include <iostream> 
class A 
{ 
 public:
   virtual void f()  //虚函数     {        
     cout << "A::f() called." << endl;     
   } 
}; 

class B:public A 
{ 
 public:     
   virtual void f()  //虚函数     { 
      cout << "B::f() called." << endl;     
   } 
}; 

void main(){
  B b;     
  void (A::*pf)()=A::f;      
  (b.*pf)(); 
}

B::f() called.
  • 给出以下程序的执行结果

#include <iostream.h> 
class A 
{
  public:     
   virtual void disp() //虚函数     {        
      cout << "Base class A." << endl;     
   } 
}; 

class B:public A 
{ 
  public:     
   virtual void disp() //虚函数     {         
      cout << "Derived class B." << endl;     
   } 
}; 

class C:public A 
{ 
  public:     
   virtual void disp() //虚函数     {        
     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.
  • 分析以下程序的错误并改正

#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,执行p->dispa(),再让p指向类B的对象b,执行p->dispb()。由于这里采用的是静态联编方式,通过指针p只能调用类A的成员函数,而类A中没有dispb()成员函数,所以出错,编译时的错误信息如下: 

error C2039: 'dispb' : is not a member of 'A'

改正的方法是将相关的成员函数改为虚函数,程序如下:

#include <iostream.h> 
class A 
{ 
 int x; 
public: 
 A(int i) { x=i; } 
 virtual void disp()  //虚函数 
{ 
  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(); 
}

程序执行结果如下:

x=1 
y=3
上机实习题
题目

设计一个评选优秀教师和学生的程序,其类结构如下图所示。当输入一系列教师或学生的记录后,将优秀学生及教师的姓名列出来,并采用相关数据进行测试。

PHP多态性和虚函数实例分析

解析:设计一个基类base,含纯虚函数isgood(),由base类派生出类student和类teacher,分别包含纯虚函数针对学生和教师为优秀的定义。对应的程序如下:

参考代码
#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;  //纯虚函数 
}; 

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 << "  每年发表论文数:";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)或学生(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 << "输入错误" << endl;   
		cout << "继续输入吗(y/n)?";    
		cin >> ch;  
	} while (ch=='y');  
	
	cout << "优秀学生或教师" << endl;  
	for (int i=0;i<count;i++)   
		if (p[i]->isgood()==True)      //若为优秀,则输出之    
	p[i]->printname(); 
	
	return 0;
}

以上就是“PHP多态性和虚函数实例分析”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

php
AI