[C++] 继承与派生的应用(作业9)

[C++]第九章 继承与派生(作业)

看到了就点个赞赞嘛~ ヾ(≧▽≦*)o~
第九周作业

*初学C++,想要把每周老师布置的实验题和自己写的程序记录下来,方便期末整理复习,请多多指教!
老师要求用的版本比较老,是Microsoft Visual C++ 2010 Express。
*)
一、实验内容1

声明二维坐标类作为基类派生圆类,把派生类圆作为基类,派生圆柱体类

其中

  • 基类二维坐标类有成员数据:x、y坐标值;有成员函数:构造函数实现对基类成员数据的初始化、输出的成员函数,要求输出坐标位置。
  • 派生类圆类有新增成员数据:半径 ( R);有成员函数:构造函数实现对成员数据的初始化、计算圆面积的成员函数、输出的成员函数,要求输出圆半径
    ( R )。
  • 派生圆柱体类新增成员数据有高(H);新增成员函数有构造函数、计算圆柱体体积的函数、输出所有成员的函数。

请完成程序代码的编写、调试,并得到正确结果。

#include<iostream>
using namespace std;
# define Pi 3.1415 
class Point
{
	float x,y;
public:
	Point(float a,float b)
	{x=a,y=b;}
	void Print()
	{cout<<"坐标位置为:"<<"("<<x<<','<<y<<")"<<endl;}
};

class Circle:public Point
{
	float R;
public:
	Circle(float a,float b,float c)
		:Point(a,b)
	{R=c;}
	float S()
	{return Pi*R*R; }
	void Show()
	{cout<<"圆的半径为:"<<R<<endl;}
};

class Column:public Circle
{
	float H;
public:
	Column(float a,float b,float c,float d)
		:Circle(a,b,c)
	{H=d;}
	float V()
	{return S()*H;}
	void Display()
	{
		Print();
		Show();
		cout<<"圆柱体的高为:"<<H<<endl;
	}
};

void main()
{
	Column c(8,9,1,10);
	c.Display();
	cout<<"圆柱体的体积为:"<<c.V()<<endl;
	
	getchar();
}

二、实验内容2
声明一个学生类,有成员数据:学号、姓名、性别、年龄,要求有如下成员函数:构造函数、输出所有成员的函数。
把学生类作为基类,通过公有继承,分别派生博士生类、硕士生类、本科生类,其中

  • 博士生类新增成员数据有 科研工作量论文数
  • 硕士生类新增成员数据有 考核成绩是否参加科研项目 (1—表示参加,0一表示未参加);
  • 本科生类新增成员数据有获得 课内学分数课外学分数

每个派生类需新增成员函数有构造函数输出所有成员的函数

请参考本实验的案例,完成程序代码的编写、调试,并得到正确结果。
思考
如果把学生类的输出成员函数取消,在派生类中,输出所有成员的函数应该如何实现?

#include<iostream>
#include<string.h>
using namespace std;
class Stu
{
	int No,Age;
	char Name[10],Sex[4];
public:
	Stu(int no,char *name,char *sex,int age)
	{
		No=no,Age=age;
		strcpy(Name,name);
		strcpy(Sex,sex);
	}
	void Print()
	{cout<<"学号:"<<No<<'\t'<<"姓名:"<<Name<<"\t性别:"<<Sex<<"\t年龄:"<<Age<<'\t';}
};
 
class Bo:public Stu
{
	int Ky,Lw;
public:
	Bo(int no,char *name,char *sex,int age,int ky,int lw)
		:Stu(no,name,sex,age)
	{Ky=ky,Lw=lw;}
	void Print1()
	{
		Print();
		cout<<"科研工作量:"<<Ky<<"\t论文数:"<<Lw<<endl;
	}
};

class Shuo:Stu
{
	float Grade;
	bool Proj;
public:
	Shuo(int no,char *name,char *sex,int age,float x,bool y)
		:Stu(no,name,sex,age)
	{Grade=x,Proj=y;}
	void Print2()
	{
		Print();
	cout<<"考核成绩:"<<Grade<<"\t是否参加科研项目(1-是,0-否):"<<Proj<<endl;;
	}

};

class Ben:public Stu
{
	float Knxf,Kwxf;
public:
	Ben(int no,char *name,char *sex,int age,float a,float b)
		:Stu(no,name,sex,age)
	{Knxf=a,Kwxf=b;}
	void Print3()
	{
		Print();
		cout<<"课内学分:"<<Knxf<<"\t课外学分:"<<Kwxf<<endl;
	}
};

void main()
{
	Bo A(100100,"张三","男",27,500,10);
	Shuo B(200100,"李芳","女",24,9,1);
	Ben C(300100,"王五","男",19,65,6);

	A.Print1();
	B.Print2();
	C.Print3();

	getchar();
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值