一、实验目的和要求:

1、学习定义和使用类的继承关系,定义派生类;

2、熟悉不同继承方式下对基类成员的访问控制;

3、掌握在派生类中初始化基类成员的方法;

4、掌握C++函数的重载机制;

5、掌握使用虚函数实现动态多样性。

二、实验内容:

2.1、定义一个人员类Person,包括姓名、编号、性别等数据成员和用于输入、输出的成员函数,在此基础上派生出学生类Student类(增加成绩)和教师类Teacher(增加教龄),并实现对学生和教师信息的输入和输出。

#include<iostream>
using namespace std;
class Person
{
public:Person(string con_name,int con_id,string con_sex){name=con_name;id=con_id;sex=con_sex;}string getname(){return name;}int getid(){return id;}string getsex(){return sex;}
private:string name;int id;string sex;
};
class Student:public Person
{
public:Student(string nam,int d,string x,int con_grade):Person(nam,d,x){grade=con_grade;}int getgrade(){return grade;}void printstudent(){cout<<getname()<<endl;cout<<getid()<<" "<<getsex()<<" "<<getgrade()<<endl;}
private:int grade;
};
class Teacher:public Person
{
public:Teacher(string nam,int d,string x,int con_teachtime):Person(nam,d,x){teachtime=con_teachtime;}int getteachtime(){return teachtime;}void printTeacher(){cout<<getname()<<endl;cout<<getid()<<" "<<getsex()<<" "<<getteachtime()<<endl;}
private:int teachtime;
};
int main()
{Student stu("李明",20,"男",98);stu.printstudent();Teacher tea("张三",35,"男",7);tea.printTeacher();return 0;
}

2.2、定义一个抽象类Shape,包含两个纯虚函数Area(计算面积)和SetShape(重设形状大小)。然后派生出三角形类Triangle、矩形Rect类、圆Circle类,分别求面积。最后定义一个Total_Area类,计算这几个形状的面积之和,各形状的数据通过Total_Area类构造函数或成员函数来设置。编写一个完整的程序。

#include<iostream>
#include<vector>
using namespace std;
const double PI=3.1415926;
class Shape
{
public:virtual double Area()=0;//声明纯虚函数,显示形状面积virtual void setShape(double,double)=0;virtual void setShape(double)=0;
};
class Triangle:public Shape
{
public:double Area(){//cout<<"Triangle的面积:"<<0.5*xx*yy<<endl;return 0.5*xx*yy;}void setShape(double){};void setShape(double con_x,double con_y){xx=con_x;yy=con_y;// cout<<"Triangle的底和高分别是:";//cin>>this->xx>>this->yy;}
protected:double xx,yy;
};
class Rect:public Shape
{
public:double Area(){//cout<<"Rect的面积:"<<len*wid<<endl;return len*wid;}void setShape(double){};void setShape(double con_len,double con_wid){len=con_len;wid=con_wid;// cout<<"Rect的长和宽分别是:";// cin>>this->len>>this->wid;}
protected:double len,wid;
};
class Circle:public Shape
{
public:double Area(){// cout<<"Circle的面积:"<<rad*rad*PI<<endl;return rad*rad*PI;}void setShape(double,double){};void setShape(double con_rad){rad=con_rad;// cout<<"Circle的半径是:";//cin>>this->rad;}
protected:double rad;
};
class total_area
{
public:
//    total_area(){};
//    ~total_area(){};double get_totalarea(){double sum=0;
//        for(int i=0;i<3;i++)
//            sum+=p[i]->Area();for(int i=0;i<shapevec.size();i++)sum+=shapevec[i]->Area();return sum;}void addShape(Shape* pShape){//p[k]=pShape;shapevec.push_back(pShape);}
protected://Shape *p[3];vector<Shape*> shapevec;
};
int main()
{total_area TotalArea;Shape *ptr[3];int pos=0;ptr[0]=new Triangle();ptr[0]->setShape(10,5);TotalArea.addShape(ptr[0]);cout<<"Triangle的面积:"<<ptr[0]->Area()<<endl;ptr[1]=new Rect();ptr[1]->setShape(10,5);TotalArea.addShape(ptr[1]);cout<<"Rect的面积:"<<ptr[1]->Area()<<endl;ptr[2]=new Circle();ptr[2]->setShape(10);TotalArea.addShape(ptr[2]);cout<<"Circle的面积:"<<ptr[2]->Area()<<endl;cout<<"总面积:"<<TotalArea.get_totalarea()<<endl;for(int i=0;i<3;i++)delete ptr[i];return 0;
}

2.3、开发一个简单的大学人员管理程序。该程序可以管理大学的一些基本人员信息:学生(student)和教师(teacher)、教授(professor)。先设计一个虚基类person,通过该类描述人员的基本信息:姓名(name)、年龄(age)和性别(sex)等。然后使用该类派生出学生类student和教师类teacher,在其中添加各自的特征。如在student类中添加专业(speciality),在teacher类中添加院系(department)等。还有部分教师在工作的同时,在职攻读学位,因此具有教师和学生双重身份,由student类和teacher类再次派生出strTeacher类。为每个类定义一个输出函数print()输出该类的相关信息。

#include<iostream>
using namespace std;
class person
{
public:person(string con_name,int con_age,string con_sex){name=con_name;age=con_age;sex=con_sex;}void display(){cout<<"姓名:"<<name<<" 年龄:"<<age<<" 性别:"<<sex<<endl;}
protected:string name;int age;string sex;
};
class student:virtual public person
{
public:student(string m_name,int m_age,string m_sex,string m_speciality):person(m_name,m_age,m_sex){speciality=m_speciality;}void display(){person::display();cout<<"专业:"<<speciality<<endl;}
private:string speciality;//专业
};
class teacher:virtual public person
{
public:teacher(string m_name,int m_age,string m_sex,string m_department):person(m_name,m_age,m_sex){department=m_department;}void display(){person::display();cout<<"院系:"<<department<<endl;}
private:string department;//院系
};
class stuTeacher:public student,teacher
{
public:stuTeacher(string s_name,int s_age,string s_sex,string s_speciality,string t_name,int t_age,string t_sex,string t_department):student(s_name,s_age,s_sex,s_speciality),teacher(t_name,t_age,t_sex,t_department),person(s_name,s_age,s_sex){person::display();student::display();teacher::display();}void print_person(){cout<<name<<" "<<age<<" "<<sex<<endl;}
private:};
int main()
{stuTeacher ST("小明",25,"男","物联网工程","小明",28,"男","计算机");ST.print_person();return 0;
}

大学人员管理程序如果要完善的话,要添加的东西有很多,有些细节和要加的东西还不是很明确,自己写残了,仅供参考,下面是借鉴别人的。

借鉴于:https://wenku.baidu.com/view/fa2010ecb8f67c1cfad6b8ca.html

#include<iostream>
using namespace std;
class Person
{
private:
//学生有 名字 姓名 年龄属性char *name;char * sex;int age;
public:/*封装一下*/Person(){}void setName(char *name2){name = name2;}char* getName(){return name;}void setSex(char *sex2){sex = sex2;}char* getSex(){return sex;}void setAge(int age2){age = age2;}int getAge(){return age;}
//print函数void print();
};
void Person::print()
{cout<<"姓名为:"<<name<<",年龄为:"<<age<<",性别为:"<<sex<<endl;
}
class Student:public Person
{
protected:Student() {}
private:char *speciality;
public:Student(char *name2,char *sex2,int age2,char *speciality2){setName(name2);setSex(sex2);setAge(age2);setSpeciality(speciality2);}void setSpeciality(char *speciality2){speciality = speciality2;}char* getSpeciality(){return speciality;}
//print函数void print();
};
void Student::print()
{cout<<"姓名为:"<<getName()<<",年龄为:"<<getAge()<<",性别为:"<<getSex()<<",专业为:"<<getSpeciality()<<endl;
}
class Teacher:public Person
{
protected:Teacher() {}
private:char *department;
public:Teacher(char *name2,char *sex2, int age2,char* department2){setName(name2);setSex(sex2);setAge(age2);setDepartment(department2);}void setDepartment(char *department2){department = department2;}char* getDepartment(){return department;}
//print 函数void print();
};
void Teacher::print()
{cout<<"姓名为:"<<getName()<<",年龄为:"<<getAge()<<", 性别为:"<<getSex()<<"部门为:"<<getDepartment()<<endl;
}
class strTeacher:public Student,public Teacher
{
public:strTeacher(char *name2,char *sex2, int age2,char *speciality,char *department2){Teacher::setName(name2);Teacher::setSex(sex2);Teacher::setAge(age2);setSpeciality(speciality);setDepartment(department2);}
//print函数void print();
};
void strTeacher::print()
{cout<<"姓名为:"<<Teacher::getName()<<",年龄为:"<<Teacher::getAge()<<",性别 为 :"<<Teacher::getSex()<<",专业为:"<<getSpeciality()<<"部门为 :"<<getDepartment()<<endl;
}
int main()
{cout<<"欢迎进入大学人员管理程序 "<<endl;Student student = Student("学生","man",21," 信息与计算科学");//创建一个学生对象Teacher teacher = Teacher("老师","woman",28,"理学院");//创建一个老师对象strTeacher stuTea=strTeacher("既是老师又是学生","man",25,"信息与计算科学","理学院");student.print();teacher.print();stuTea.print();return 0;
}

C++ 上机实验(二)【继承与多态】相关推荐

  1. 计算机在材料科学中的应用上机二,计算机在材料科学中的应用-上机实验二.doc...

    计算机在材料科学中的应用-上机实验二 实验二 Office使用技巧 ? 1 Word工具栏的增删与了解其主要作用 (1) ? 把"常用"和"格式"工具栏打开(一 ...

  2. C#——《C#语言程序设计》实验报告——继承与多态——电视和电灯委托

    一.实验目的 掌握C#中各种成员的写法: 掌握C#继承和多态概念: 掌握常用接口的使用方法. 二.实验内容 运用委托知识,完成以下程序: 有下面两个类,代表电视和电灯,设计两个委托,在Program类 ...

  3. C#——《C#语言程序设计》实验报告——继承与多态——银行ATM程序

    一.实验目的 掌握C#中各种成员的写法: 掌握C#继承和多态概念: 掌握常用接口的使用方法. 二.实验内容 在银行ATM示例的基础上,利用面向对象的思想及语法,进行改进.要求如下: 1)使用面向对象的 ...

  4. C++实验_2:继承和多态

    文章目录 实验背景 1.类的继承 1.1.继承访问权限测试 1.1.1.public, protected, private属性测试 1.1.2.类的继承方式区别(public, protected, ...

  5. Java实验3继承、多态

    继承.多态(接口和包) 实验目的 (1) 掌握Java语言中继承和多态的相关概念 (2) 掌握Java程序设计中继承和多态机制的使用 (3) 掌握Java语言中接口和包的概念及使用 实验内容及要求 仿 ...

  6. 合肥工业大学2021汇编语言程序设计上机实验二

    实验二  高级汇编程序设计 实验目的 1. 掌握中断服务子程序的编写. 2. 汇编语言与高级语言的混编. 实验内容 1.挂接1CH中断,正计时90秒后退出.要求屏幕显示0-89的秒数. 2.VC++中 ...

  7. 【Java程序设计】Java上机实验(二)

    实验二.数组     一.实验目的: 1.学会使用一维与二维数组管理简单数据. 2.学会编写简单的菜单驱动(命令行式)的Java程序 二.实验环境: BLUEJ 三.实验内容: (写出主要的内容) 1 ...

  8. 林子雨—大数据技术原理与应用—上机实验二

    题目:熟悉常用的HDFS操作 实验环境:        操作系统:ubuntu16.04        hadoop版本:1.2.1        JDK版本:1.8        Eclipse 3 ...

  9. C++上机实验二第2题

    第2题 函数的默认参数 #include<iostream> #include<cstring> using namespace std;int display(string ...

  10. 大连理工大学操作系统上机实验二

    编写一个多进程并发执行程序.父进程首先创建一个执行ls命令的子进程然后再创建一个执行ps命令的子进程,并控制 ps 命令总在 ls 命令之前执行. #include<sys/types.h> ...

最新文章

  1. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(31)-MVC使用RDL报表
  2. 北大韦神透露现状:自己课讲得不太好,中期学生退课后就剩下5、6个人...
  3. nodejs python 通信_Nodejs环境实现socket通信过程解析
  4. FreeRTOS学习及移植笔记之二:在IAR和STM32F103VET上移植FreeRTOS
  5. c++ 解析xml文件
  6. 地铁框架保护的原理_继电保护的基础知识和原理(地铁)
  7. C++指针、this指针、静态成员
  8. octotree插件 --- 将 Github 项目代码以树形格式展示
  9. android语法高亮插件,安卓语法高亮编辑器 HighlightTextEditor
  10. 软件工程 实践者的研究方法 中文题答案
  11. 笔记本CPU处理器HQ,H,U,M,型号之间的区别
  12. 这几招教你如何增加食物中铁的吸收
  13. webstorm中使用nodemon
  14. 【python】OpenCV—RGB, Rectangle, Circle, SS(1)
  15. 【转】软件安装错误2203(The error code is 2203)
  16. 计算机导论课后总结3
  17. [渝粤教育] 九江学院 药理学 参考 资料
  18. 一个疑惑的的问题-ntvdm.exe进程
  19. 如何在scrapy中捕获并处理各种异常
  20. python的字典-使用字典+遍历字典+字典嵌套

热门文章

  1. Python基础之集合
  2. Android客户端访问服务器保持SESSION会话的实现
  3. 陶行知:学生自治问题之研究
  4. 纳米二氧化硅修饰中孔ZSM-5沸石微球/含钆介孔二氧化硅海藻酸钠纳米微球
  5. 5G NGC — 开放的 N4 接口
  6. APISpace 未来7天生活指数API接口 免费好用
  7. Latex中字母上面加符号
  8. 杭电acm 4545魔法串(字符串处理)
  9. 卷一:C佳佳语法第1篇
  10. 超简单集成HMS ML Kit 实现parental control