PHP多态性和虚函数实例分析
创始人
2024-12-26 01:41:27
0次
理论练习题 
  • 给出以下程序的执行结果。

#include  
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  
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  
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  
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  
#include  

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;iisgood()==True)      //若为优秀,则输出之    
	p[i]->printname(); 
	
	return 0;
}

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...