C++实验(2) 继承与多态

30人阅读 评论(0) 收藏 举报

C++实验(2)    继承与多态

一、实验目的和要求:

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

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

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

4.掌握使用虚函数实现动态多样性。

要求:认真调试程序,认真书写实验报告,并对结果作分析。

二、实验内容

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

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

3.开发一个简单的大学人员管理程序,该程序可以管理大学的一些基本人员:学生(student)、教师(teacher)、教授(professor)。首先设计一个虚基类person。通过该类保存人员的最基本信息:姓名(name)、年龄(age)和性别(sex)。然后使用该类派生出学生类student和教师类teacher,在其中添加各自的特性,如在student类中添加如下信息:专业(speciality),在teacher类中添加院系(department)等。还有部分教师在工作的同时在职修读学位,因此同时具有教师和学生双重身份,所以由student类和teacher类再次派生出stuTeacher类。为每个类定义一个输出函数print(),输出该类相关信息。
嘿嘿,萌新一个,如有不对,请指出,后会改进。
#include "iostream"
#include "string"

using  namespace std;

class Person
{
private: string  m_Name; 
		 int m_Id;
		 string m_Sex;
public:
		 Person() {}
		 Person(string name,string sex,int id)
		 {
			 m_Name = name;
			 m_Sex = sex;
			 m_Id = id;
		 }
		 void Person_display()
		 {
			 cout  << m_Name << " " << m_Sex << " " << m_Id << " " ;
		 }

};
class  Student :Person
{
private: int m_Score;
public: 
	Student() {}
	Student( string name, string sex, int id,int score) :Person(name, sex, id)
	{
		m_Score = score;
	}
	void Student_display()
	{
		cout << "Student Informain:  ";
		Person_display();
		cout << " " << m_Score << endl;
	}
	~Student() 
	{
		cout << "Object has been detele" << endl;
	}
};
class Teacher :Person
{
private: int m_Age;
public:
	Teacher() {}
	Teacher(string name, string sex, int id,int age):Person(name, sex, id)
	{
		m_Age = age;
	}
	void Teacher_display()
	{
		cout << "Teacher Informain:  ";
		Person_display();
		cout << " " << m_Age << endl;
	}
	~Teacher()
	{
		cout << "Object has been detele" << endl;
	}
};
int main()
{
	Student student("刘 ", " 男",5067, 120);
	student.Student_display();
	Teacher teacher("刘老师", "男 ", 674, 45); 
	teacher.Teacher_display();
	return 0;
}

(2)

#include "iostream"
#include  "string"

using namespace std;

class Shape
{
public:

	virtual double Get_Area()=0;
	virtual  void Set_Area()=0;
};
class Triangle :public Shape
{
private:double m_Len1,m_Len2, m_Len3;
public:	

	Triangle() {}
	Triangle(double len1,double len2,double len3)
	{
		m_Len1 = len1;
		m_Len2 = len2;
		m_Len3 = len3;	
	}
	~Triangle() {}
	virtual double Get_Area()
	{	
		double P;
		double S;
		P = (m_Len1 + m_Len2 + m_Len3) / 2;
		S = sqrt(P*(P - m_Len1)*(P - m_Len2)*(P - m_Len3));
		return S;
	}
	virtual void  Set_Area()
	{
		cout << "输入三角形三边: ";
			cin >> m_Len1;
			cin >> m_Len2;
			cin>> m_Len3;
	}
};

class Rect :public Shape
{
private: double m_Len;
		 double m_Wid;
public: 
	
	Rect() {}
	Rect(double len,double wid)
	{
		m_Len = len;
		m_Wid = wid;
	
	}
	virtual double Get_Area()
	{	
		double S; 
		S = m_Len * m_Wid;
		return S;
	}
	virtual void  Set_Area()
	{
		cout << "输入矩形的长,宽: ";
		cin >> m_Len;
		cin >> m_Wid;
	}
};

class Circle :public Shape
{
private: double m_R;
public:
	double S;
	 Circle(){}
	  Circle(double r)
		  {
			  m_R = r;
		  }
	  ~Circle()
	  {}
	  virtual void  Set_Area()
	  {
		  cout << "输入圆的半径: ";
		  cin >> m_R;
	  }
	  virtual double Get_Area()
	  { 
		  S =m_R * m_R*3.14;
		  return S;
	  }
};
class Total_Area : public Triangle,public Rect,public Circle
{
public:
	double S_ALL;
	Total_Area() {}
	~Total_Area() 
	{
	
	}
	double ALL_Area(Shape *p_Triangle,Shape *p_Rect,Shape *p_Circle)
	{	
		
		S_ALL = p_Triangle->Get_Area() + p_Rect->Get_Area() + p_Circle->Get_Area();
		return S_ALL;
	}
};

int main()
{
	Triangle triangle;
	Rect rect;
	Circle circle;
	Total_Area total_area;
	triangle.Set_Area();
	rect.Set_Area();
	circle.Set_Area();
	cout << "Triangle_S= " << triangle.Get_Area() << endl;
	cout << "Rect_S=     " << rect.Get_Area() << endl;
	cout << "Circle_S=   " << circle.Get_Area() << endl;
	cout << "Total_Area= " << total_area.ALL_Area(&triangle, &rect, &circle) << endl;
	return 0;
}

(3)

#include "iostream"
#include "string"
using namespace std;

class Person
{
private: string m_Name;
		 string m_Sex;
		 int m_Age;
public:
	Person() {}
	Person(string name, string sex, int age)
	{
		m_Name = name;
		m_Sex = sex;
		m_Age = age;
	}
	string Person_Get_Name()
	{
		return m_Name;
	}
	string Person_Get_Sex()
	{
		return m_Sex;
	}
	int Person_Get_Age()
	{
		return m_Age;
	}
};

class Student :virtual public Person
{
private: string m_Speciality;
public:
	Student() {}
	Student(string name, string sex, int age,string speciality):Person(name,sex,age)
	{
		m_Speciality = speciality;
	}
	~Student() 
	{

	}
	string Student_Get_Speciality()
	{
		return m_Speciality;
	}
	void Stu_print()
	{
		cout << "Student Information: " << Person_Get_Name() << " " << Person_Get_Sex() << " " << Person_Get_Age() << " " << m_Speciality << endl;
	}
};
class Teacher :virtual public Person
{
private: string m_Department;
public:
	Teacher() {}
	Teacher(string name, string sex, int age, string department) :Person(name, sex, age)
	{
		m_Department = department;
	}
	~Teacher()
	{
		
	}
	string Teacher_Get_Department()
	{
		return  m_Department;
	}
	void Tea_print()
	{
		cout << "Teacher Information: " << Person_Get_Name() << " " << Person_Get_Sex ()<< " " << Person_Get_Age() << " " << m_Department << endl;
	}
};
class Professor :virtual public Person
{
private: string m_Position;
public:
	Professor() {}
	Professor(string name, string sex, int age, string position) :Person(name, sex, age)
	{
		m_Position = position;
	}
	~Professor()
	{
		
	}
	void Pro_print()
	{ 
		cout << "Position Information: " << Person_Get_Name() << " " << Person_Get_Sex() << " " << Person_Get_Age() << " " << m_Position << endl;
	}
};

class StuTeacher :public Student,public Teacher
{
	public:
	StuTeacher() {}
	StuTeacher(string name, string sex,int  age, string speciality,string  department):Person(name,sex,age),Student(name,sex,age, speciality),Teacher(name, sex, age, department)
	{
	}
	~StuTeacher()
	{

	}
	void Stu_Tea_print()
	{
		cout << "StuTeacher Information: " << Person_Get_Name() << " " << Person_Get_Sex() << " " << Person_Get_Age() << " " <<Student_Get_Speciality() <<" "<< Teacher_Get_Department()<< endl;
	}
};
int main()
{
	Student student(" 李", "男", 21, "物联网工程专业");
	student.Stu_print();
	Teacher teacher("王老师", "女", 38, "计算机机与信息与信息工程学院");
	teacher.Tea_print();
	Professor professor("李教授", "男", 68, "高级教授");
	professor.Pro_print();
	StuTeacher  stutracher("在读老师", "男", 46," 物联网工程专业", "计算机与信息工程学院");
	stutracher.Stu_Tea_print();
	return 0;
}
不足之处,请大佬们指导。

查看评论

用C++实现类的继承与多态实验

  • 2011年06月04日 13:42
  • 138KB
  • 下载

Java 继承与多态实验

实验讲义   上机题目一:试以Point类为例,尝试对Object类的clone()方法和equal()方法进行覆盖。 上机题目二:现在输入n个数字,以逗号分开、放入一个字符串中,然后按升序和降序排序...
  • u014253173
  • u014253173
  • 2014-04-12 11:28:03
  • 1860

Java实验5继承和多态

目的: 理解继承与多态的概念,熟练掌握使用方法   1、 设计一个数据类型判断类Polymorphism,使用重载、装箱等技术判断一个不带等号的Java表达式的结果的数据类型。 2、 设计一个...
  • u010286615
  • u010286615
  • 2014-07-02 13:37:41
  • 1251

java实验报告(2)-多态和继承

  • 2010年06月11日 07:54
  • 74KB
  • 下载

面向对象实验三( 组合、继承与多态性)

一、实验目的 1、掌握继承机制。 2、掌握虚函数。 3、理解并掌握虚基类。 二、实验内容 1、编写一个程序:设计一个汽车类,数据成员有轮子个数、车重。小车类是汽车类的私有派生类,包含载客量。卡车类...
  • u012788815
  • u012788815
  • 2013-11-18 21:50:43
  • 853

【c++知识归纳】继承与多态(一)

c++是基于面向对象的编程语言,面向对象的三大特性为:封装、继承和多态。本文将我对继承与多态的理解进行了总结归纳,这部分内容对于学习c++编程语言是非常重要的,文章加入我的个人理解,希望能给大家带来帮...
  • XHfight
  • XHfight
  • 2016-08-24 02:45:19
  • 1795

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

一、实验目的和要求: 1、学习定义和使用类的继承关系,定义派生类; 2、熟悉不同继承方式下对基类成员的访问控制; 3、掌握在派生类中初始化基类成员的方法; 4、掌握C++函数的重载机制; 5、掌握使用...
  • Jane_JXR
  • Jane_JXR
  • 2017-04-30 09:26:42
  • 803

C/C++继承类的多态表现

学过C++和Java的人都知道,他们二者由于都可以进行面向对象编程,而面向对象编程的三大特性就是封装、继承、多态,所有今天我们就来简单了解一下C++和Java在多态这方面的不同。 首先我们各看一个案...
  • dongxianfei
  • dongxianfei
  • 2016-12-29 16:14:48
  • 1025

实验报告5——C#面向对象进阶(继承与多态)

课程名称:嵌入式系统应用开发 (WinCE版)                        开课机房:钱江学院六号楼(603)2008年12月2日星期二专业班级电子060学号 姓名 成绩 实验项目名...
  • changesway
  • changesway
  • 2008-12-01 23:37:00
  • 2084

C语言模式实现C++继承和多态

这个问题主要考察的是C和C++的区别,以及C++中继承和多态的概念。C和C++的区别C语言是面向过程的语言,而C++是面向对象的过程。什么是面向对象和面向过程? 面向过程就是分析解决问题的步骤,然后用...
  • wenqiang1208
  • wenqiang1208
  • 2017-07-28 12:36:45
  • 855
    个人资料
    等级:
    访问量: 0
    积分: 22
    排名: 0
    文章分类
    文章存档