河工大廊坊实验六(实验 6 继承与派生)

简介: 2.编写一个学生和教师数据输入和显示程序,学生数据包含编号、姓名、班号和成绩,教师数据有编号、姓名、职称和部门。要求将编号、姓名输入和显示设计成一个类CPerson,并作为学生类CStudent和教师类CTeacher的基类。要求:(1)为CPerson类、CStudent类和CTeacher类提供必要的成员函数;(2)提供派生类构造函数,显式调用基类CPerson的构造函数。

2.编写一个学生和教师数据输入和显示程序,学生数据包含编号、姓名、班号和成绩,教师数据有编号、姓名、职称和部门。要求将编号、姓名输入和显示设计成一个类CPerson,并作为学生类CStudent和教师类CTeacher的基类。要求:


(1)为CPerson类、CStudent类和CTeacher类提供必要的成员函数;


(2)提供派生类构造函数,显式调用基类CPerson的构造函数。



#include<iostream>
#include<string>
using namespace std;
class CPerson{
public:
  int date;//编号
  string name;
  CPerson(){}
  CPerson(string n,int d):name(n),date(d){}
  void set(string n,int d){
    name=n;
    date=d;
  }
  void output(){
    cout<<"姓名:"<<name<<"\n编号:"<<date<<endl;
  }
};
class CStudent :public CPerson{
public:
  int Myclass;//班号
  float score;
  CStudent(){}
  CStudent(string n,int d,int mc,float s):CPerson(n,d),Myclass(mc),score(s){}
  void set(string n,int d,int mc,float s){
    CPerson::set(n,d);
    Myclass=mc;
    score=s;
  }
  void output(){
  cout<<"姓名:"<<name<<"\n编号:"<<date<<endl;
  cout<<"班号:"<<Myclass<<"\n成绩:"<<score<<endl;
  }
};
class CTtudent :public CPerson{
public:
  string Myzhicheng;//职称
  string bumeng;//部门
  CTtudent(){};
  CTtudent(string n,int d,string mc,string s):CPerson(n,d),Myzhicheng(mc),bumeng(s){}
  void set(string n,int d,string mc,string s){
    CPerson::set(n,d);
    Myzhicheng=mc;
    bumeng=s;
  }
  void output(){
  cout<<"姓名:"<<name<<"\n编号:"<<date<<endl;
  cout<<"职称:"<<Myzhicheng<<"\n部门:"<<bumeng<<endl;
  }
};
int main(){
  CStudent a1("笑霸final",101600,4,750);
  CStudent a2;
  a2.set("张三",101601,4,600);
  CTtudent b1("刘老师",102600,"优秀老师","计科部");
  CTtudent b2;
  b2.set("张老师",102601,"优秀老师","基础部");
  a1.output();
  a2.output();
  cout<<endl;
  b1.output();
  b2.output();
  system("pause");
  return 0;
}


3.定义类CPoint,描述坐标系中的一个点;在其基础上派生出圆CCircle类,增加圆半径信息;在CCircle类基础上派生出Cylinder类,增加圆柱高信息。要求必须具有的成员函数:带参的构造函数、对数据成员进行赋值的函数、获取数据值的函数,同时派生类CCircle类应具有计算并返回圆面积、圆周长的函数;派生类Cylinder类应具有计算并返回圆柱体表面积、圆柱体体积的函数。编写主函数,测试这个层次结构,输出圆柱体类的相关信息。


*
3. 定义类CPoint,描述坐标系中的一个点;
在其基础上派生出圆CCircle类,增加圆半径信息;
在CCircle类基础上派生出Cylinder类,增加圆柱高信息。
要求必须具有的成员函数:
带参的构造函数、对数据成员进行赋值的函数、获取数据值的函数,
同时派生类CCircle类应具有计算并返回圆面积、圆周长的函数;
派生类Cylinder类应具有计算并返回圆柱体表面积、圆柱体体积的函数。
编写主函数,测试这个层次结构,输出圆柱体类的相关信息。
*/
#include<iostream>
#include<cmath>
using namespace std;
class CPoint{
public:
  float x,y;
  CPoint(){}
  CPoint(float a,float b):x(a),y(b){}
};
class CCircle:public CPoint{
protected:
  float r;
public:
  CCircle(){}
  CCircle(float a,float b,float c)
    :CPoint(a,b),r(c){}
  void set(float a,float b,float c){
  x=a;
  y=b;
  r=c;
  }
  float gte_x()const{return x;}
  float gte_y()const{return y;}
  float gte_r()const{return r;}
  double area(){
    return 3.14*pow(double(r),2.0);
  }
  float perimeter(){
    return 2*3.14*r;
  }
};
class Cylinder:public CCircle{
private:
  float h;
public:
  Cylinder(float a,float b,float c,float d)
    :CCircle(a,b,c),h(d){}
  Cylinder(){}
  void set(float a,float b,float c,float d){
  x=a;
  y=b;
  r=c;
  h=d;
  }
  double B_area(){
  return area()*2+perimeter()*h;
  }
  double volume(){
    return  area()*h;
  }
  float get_h()const{return h;}
};
int main(){
  Cylinder a1(0,0,1,1),a2;
  cout<<"圆柱体底面圆心坐标:"<<'('<<a1.gte_x()<<','<<a1.gte_y()<<')'<<endl;
  cout<<"圆柱体底面圆半径:"<<a1.gte_r()<<endl;
  cout<<"圆柱体的高:"<<a1.get_h()<<endl;
  cout<<"圆柱体的体积:"<<a1.volume()<<endl;
  float x,y,r,h;
  cout<<"输入圆柱体底面圆的圆心坐标及半径:";
  cin>>x>>y>>r;
  cout<<"输入圆柱的高:";
  cin>>h;
  a2.set(x,y,r,h);
  cout<<"圆柱体底面圆心坐标:"<<'('<<a2.gte_x()<<','<<a2.gte_y()<<')'<<endl;
  cout<<"圆柱体底面圆半径:"<<a2.gte_r()<<endl;
  cout<<"圆柱体的高:"<<a2.get_h()<<endl;
  cout<<"圆柱体的体积:"<<a2.volume()<<endl;
  system("pause");
return 0;
}
目录
相关文章
|
3月前
|
设计模式 固态存储 开发者
创建一个仅用一个函数/模块/类就可以处理这组不同事物的抽象
在软件开发中,良好的变量名和函数名能够显著提升代码的可读性和可维护性。对于变量命名,建议使用有意义且易于发音的名字(如 `currentDate` 而非 `yyyymmdstr`),对同类变量使用一致的词汇(如统一使用 `getUser`),以及使用解释性的变量名以减少理解成本(如使用常量 `MILLISECONDS_IN_A_DAY` 替代数字 `86400000`)。此外,避免不必要的上下文重复,并使用默认参数代替逻辑运算。对于函数,应限制参数数量(理想情况下不超过两个),确保每个函数只做一件事,并且函数名应清晰描述其功能。通过遵循这些原则,代码将更加简洁明了。
32 3
|
3月前
|
Java C++ 开发者
"深度剖析!接口VS抽象类、聚合VS组合...这6大OOP谜题,你真的全解开了吗?点击揭秘真相!"
【8月更文挑战第19天】接口与聚合是面向对象编程的关键,对于构建灵活、可扩展的软件系统至关重要。本文澄清六个常见疑惑:接口与抽象类的区别、为何使用接口、聚合与组合的不同、接口的新特性、聚合与继承的关系,以及如何合理选择接口、聚合和继承,助你深刻理解并准确应用这些核心概念。
38 0
|
5月前
|
Java
Java面向对象特征(二)----- 继承
Java面向对象特征(二)----- 继承
Java面向对象特征(二)----- 继承
|
Java
ChatGPT告诉你Java内部类 vs. 组合的区别
ChatGPT告诉你Java内部类 vs. 组合的区别
101 0
|
存储 开发框架 .NET
【C#本质论 七】类-从设计的角度去认知(继承)(上)
【C#本质论 七】类-从设计的角度去认知(继承)(上)
93 0
|
编译器 C#
【C#本质论 七】类-从设计的角度去认知(继承)(下)
【C#本质论 七】类-从设计的角度去认知(继承)(下)
68 0
|
编译器 C#
【C#本质论 六】类-从设计的角度去认知(封装)(下)
【C#本质论 六】类-从设计的角度去认知(封装)(下)
88 0
|
存储 Java 程序员
【C#本质论 六】类-从设计的角度去认知(封装)(上)
【C#本质论 六】类-从设计的角度去认知(封装)(上)
110 0
C++类的继承实验(简易的商品系统)
实验概述: 实验目的: 通过归纳与总结类之间的继承与派生关系,设计并编程实现若干个相互有关联的自定义类,而后对这些类进行简单使用。
380 0