【作业练习】 类与对象

来源:互联网 发布:学校网络环境建设 编辑:程序博客网 时间:2024/05/16 09:20

(1)掌握类的定义和使用

(2)掌握类的定义和对象的使用

(3)复习具有不同访问属性的成员的访问方法

(4)观察构造函数和析构函数的执行过程

(5)学习类的聚集使用方法

(6)使用debug调试功能观察程序流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序


实验内容:

(1)定义一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性,有两个共有成员函数run、stop。其中,rank为枚举类型定义为enumCPU_Ranl{P1=1,P2,P3,P4,P4,P5,P6,P7},frequency为单位是MHz的整数,voltage为浮点型的电压值。观察构造函数和析构函数的调用顺序。

#include <iostream>     using namespace std;  enum CPU_Rank {p1=1,p2,p3,p4,p5,p6,p7};  class CPU  { private:         CPU_Rank  rank;         int freauency;         float voltage;      public:         CPU(CPU_Rank r, int f,float v)      { rank=r;           freauency=f;           voltage=v;           cout<<" This is CPU construct program"<<endl;}          ~CPU()    {cout<<" This is CPU destroy function"<<endl;}         void run(){cout<< " The CPU is running"<<endl;}         void stop(){cout<< " The CPU is Stopping"<<endl;}  };  int main()  {   enum CPU_Rank  rank;  rank=p5;  CPU cpu1(rank,1024,3.6);  cpu1.run();  cpu1.stop();  return 0;  }


(2)定义一个简单的Computer类,有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等等,有两个公有成员函数run、stop。Cpu为CPU类的对象,ram为RAM类的一个对象,cdrom为CDROM类的对象,定义并实现这个类。


#include <iostream> using namespace std; enum CPU_Rank {p1=1,p2,p3,p4,p5,p6,p7};class CPU  { private:        CPU_Rank  rank; int freauency;        float voltage;   public:        CPU(CPU_Rank r, int f,float v)   { rank=r;    freauency=f;   voltage=v;       cout<<" This is CPU construct program"<<endl;}          ~CPU()   {cout<<" This is CPU destroy function"<<endl;}        void run(){cout<< " The CPU is running"<<endl;}         void stop(){cout<< " The CPU is Stopping"<<endl;} };  int main() {   enum CPU_Rank  rank; rank=p5;   CPU cpu1(rank,1024,3.6);  cpu1.run();  cpu1.stop();  return 0;} 



(3)设计一个用于人事管理的People类。考虑到通用性,只抽象出所有类型人员都具有的属性:number(编号)、sex(性别)、birthday(出生日期)、id(身份证号)等等。其中“出生日期”定义为一个“日期”类内嵌子对象。用成员函数实现对人员信息的录入和显示。要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、聚集。


#include <iostream>using namespace std;class data{                         //data类的定义 public:  data(int y=0,int m=0,int d=0)    //构造函数  { year=y; month=m; day=d;  }  data(data &mybirthday);  int gety() {return year;}  int getm() {return month;}  int getd() {return day;}  void ouput(){cout<<"  年: "<<year<<"  月: "<<month<<"  日: "<<day<<endl;}private:  int year;  int month;  int day;};data::data(data &mybirthday)    //复制构造函数的实现{   year=mybirthday.year;   month=mybirthday.month;   day=mybirthday.day; }class people{               //personal类的定义public:                        //外部接口  people(int n,char s,int i,data b);  people(people &liming);  void input();  void output();private:   int number;   char sex;   int id;   data birthday;              //data类的对象birthday};//组合类的构造函数实现people::people(int n,char s,int i,data b):number(n),sex(s),id(i),birthday(b){ }//组合类的复制构造函数实现people::people(people &liming):number(liming.number),sex(liming.number),id(liming.id){ }void people::output(){  cout<<"学号:"<<number<<"  性别: "<<sex<<"  身份证号: "<<id;  birthday.ouput();}int main(){ data mybirthday(1995,07,07); people  yanggengchen(1610003033,'m', 412702 ,mybirthday); cout<<"my information is:"<<endl; cout<<"注意性别中m为男,f为女"<<endl; yanggengchen.output(); return 0;}


(4)(综合)设计一个电子日期类CDate。满足如下要求:

       ● 用日/月/年格式输出日期

       ● 可运行日期加一天的操作

       ● 设置日期


// 设计类CDate// 满足:输出年月日日期格式;输入的日期加1;设置日期#include<iostream>using namespace std;class CDate{private:int m_nDay;int m_nMonth;int m_nYear;bool IsLeapYear(); // 输入日期格式涉及到对闰年的判断public:CDate();CDate(int, int, int);void Display();void AddDay();void SetDate(int, int, int);~CDate();};CDate::CDate(){} // 默认构造函数初始化CDate::CDate(int year, int month, int day) // 带参构造函数初始化{m_nDay=day;m_nMonth=month;m_nYear=year;}void CDate::Display() // 日期显示{cout<<m_nDay<<"日"<<m_nMonth<<"月"<<m_nYear<<"年"<<endl;}void CDate::AddDay() // 当前日期加1{if(IsLeapYear()) // 先判断是否是闰年{if(m_nMonth == 2 && m_nDay == 29){m_nMonth++;m_nDay=1;return;}}else{if(m_nMonth == 2 && m_nDay == 28){m_nMonth++;m_nDay=1;return;}}if(m_nMonth == 4 || m_nMonth == 6 || m_nMonth == 9 || m_nMonth == 11) // 再判断月份{if(m_nDay == 30){m_nMonth++;m_nDay=1;return;}}else if(m_nMonth == 12){if(m_nDay == 30){m_nMonth=1;m_nDay=1;return;}}else{if(m_nDay == 31){m_nMonth++;m_nDay=1;return;}}m_nDay++; // 普通年份普通月份普通日子就直接加1}void CDate::SetDate(int year, int month, int day) // 设置当前日期{m_nYear=year;m_nMonth=month;m_nDay=day;}CDate::~CDate(){}bool CDate::IsLeapYear() // 判读闰年{bool bLeap;if((m_nYear%100 != 0 && m_nYear%4 == 0) || m_nMonth%400 ==0)bLeap=1;return bLeap;}int main(){CDate date;int y, m, d;cout<<"请输入年月日:";cin>>y>>m>>d;date.SetDate(y, m, d);cout<<"当前输入日期:";date.Display();date.AddDay();cout<<"当前日期加1:";date.Display();return 0;}



0 0
原创粉丝点击