【C++实验】多态与虚函数(评选优秀候选人)

多态与虚函数

  • 多态性概念
    是指同样的消息被不同的对象接收时导致的不同行为
    • 消息是指对类的成员函数的调用
    • 不同的行为是指不同的实现,也就是调用不同的函数
  • 赋值兼容性规则
    • 对于基类及其公有派生类的对象,可以使用相同的函数统一处理,而没有必要为每个类设计单独的功能模块
    • 当函数的形参为基类对象时,实参可以是派生类的对象
    • 当函数的形参为指向基类对象的指针时,实参可以是派生类对象的地址
    • 当函数的形参为基类对象的引用时,实参可以是派生类的对象
  • 虚函数的使用方法
    (1)在基类用virtual声明成员函数为虚函数。在派生类中重新定义同名函数,让它具有新的功能。
    (2)在派生类中重新定义此函数时,要求函数名、函数类型、参数个数和类型与基类的虚函数相同,根据需要重新定义函数体C++规定,当一个成员函数被声明为虚函数后,其派生类中的同名函数自动成为虚函数。
    (3)定义一个指向基类对象的指针变量,并让它获得同一类族中某个对象的地址。
    (4)用该指针变量调用虚函数,调用的就是该对象所属类的虚函数。

实验内容

设计评选优秀教师和优秀学生候选人的程序。如果学生的分数大于90,则可评为优秀生;如果教师发
表的论文数大于 3,则可评为优秀教师。具体要求如下:
(1)定义基类Base:①保护数据成员
char name[8]; //存放姓名
int num; //存放分数或论文数
②公有成员函数
Base():构造函数,输入姓名;
void print):功能函数,输出数据成员;
virtual int Isgood()=0:纯虚函数,用于判断是否满足条件;
(2)由基类派生学生类Student,定义公有成员函数:
Student():构造函数,输入分数;
int Isgood():根据优秀学生的标准,满足条件返回1,否则返回0;
(3)由基类派生教师类Teacher,定义公有成员函数:
Teacher():构造函数,输入论文数;
int Isgood():根据优秀教师的标准,满足条件返回1,否则返回0;
(4)在主函数中定义学生数组和教师数组,输入一系列教师或学生的记录后,将优秀教师及学生候选
人的情况列出来,并体现运行的多态性

代码展示

#include <iostream>
using namespace std;
class Base
{
	protected:
		char name[8];  //存放姓名 
		int num;  //存放分数或论文数
	public:
		Base();  //构造函数,输入姓名
		void print();  //功能函数,输出数据成员 
		virtual int Isgood()=0;  //纯虚函数,满足条件返回1,否则返回0 
};
Base::Base()
{
	cout<<"姓名:";
	cin>>name; 
}
void Base::print()
{
	cout<<"姓名:"<<name<<'\t'<<num<<'\n';	
}

class Student:public Base
{
	public:
		Student();  //构造函数,输入分数 
		int Isgood();  //根据优秀学生的标准,满足条件返回1,否则返回0 
		
};
Student::Student()
{
	cout<<"考试成绩:";
	cin>>num;
}
int Student::Isgood()
{
	return (num>90)?1:0;	
}

class Teacher:public Base
{
	public:
		Teacher();  //构造函数,输入论文数 
		int Isgood();	//根据优秀教师的标准,满足条件返回1,否则发怒hi0 
};
Teacher::Teacher()
{
	cout<<"论文数:";
	cin>>num;
}
int Teacher::Isgood()
{
	return (num>3)?1:0;
}


int main()
{
	cout<<"请输入学生信息:\n";
	Student stu[5];
	cout<<"\n请输入教师信息:\n"; 
	Teacher	tea[5];
	cout<<"\n优秀学生候选人:\n";
	int i;
	Base *p;  
	for(i=0,p=stu;i<5;i++,p++)
		if(p->Isgood()) 
		p->print();
	cout<<"\n优秀教师候选人:\n";
	for(i=0,p=tea;i<5;i++,p++)
		if(p->Isgood())
		p->print();
} 

输出结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值