实验2 类和对象的定义与使用
1、实验目的
(1)掌握类与对象的定义;
(2)掌握构造函数和析构函数的实现方法;
(3)掌握静态成员函数和友元函数的使用方法;
(4)掌握类对象作为成员的使用方法。
2、实验学时:6学时
3、实验内容
(1)声明一个CPU类,在该类中包括数据成员rank(等级)、frequency(频率)、voltage(电压)。其中,rank为字符型,可以取等级’A’、’B’、’C’、’D’;frequency为整型(单位MHz),voltage为浮点型;还包括成员函数GetRank( )、GetFrequency( )、GetVoltage( )用来获取等级、频率、电压的值。SetRank( )、SetFrequency( )、SetVoltage( )用来设置等级、频率、电压的值。Run( )、Stop( )中Run( )要求输出“CPU开始运行!”,Stop( )要求输出“CPU停止运行!”。构造函数需要输出“构造一个CPU”,析构函数需要输出“析构一个CPU”。观察构造函数和析构函数的调用顺序。编写主函数使用这个类定义两个对象cpu1,cpu2,调用不同在成员函数,观察数据的赋值和输出。
#include<iostream>
using namespace std;
class CPU
{
public:
char rank='A';
int frequency=1000;
float voltage=220;
CPU();
~CPU();
int GetRank();
int GetFrequency();
int GetVoltage();
int SetRank(char r);
int SetFrequency(int f);
int SetVoltage(float v);
int Run();
int Stop();
};
CPU::CPU()
{
cout<<"构造一个CPU"<<endl;
}
CPU::~CPU()
{
cout<<"析构一个CPU"<<endl;
}
CPU::GetRank()
{
cout<<rank<<endl;
return rank;
}
CPU::GetFrequency()
{
cout<<frequency<<endl;
return frequency;
}
CPU::GetVoltage()
{
cout<<voltage<<endl;
return voltage;
}
CPU::SetRank(char r)
{
rank=r;
cout<<rank<<endl;
return rank;
}
CPU::SetFrequency(int f)
{
frequency=f;
cout<<frequency<<endl;
return frequency;
}
CPU::SetVoltage(float v)
{
voltage=v;
cout<<voltage<<endl;
return voltage;
}
CPU::Run()
{
cout<<"CPU开始运行"<<endl;
}
CPU::Stop()
{
cout<<"CPU停止运行"<<endl;
}
int main()
{
CPU cpu1,cpu2;
cpu1.GetRank();
cpu1.GetFrequency();
cpu1.GetVoltage();
cpu1.SetRank('B');
cpu1.SetFrequency(2200);
cpu1.SetVoltage(110);
cpu1.Run();
cpu1.Stop();
cout<<endl;
cpu2.GetRank();
cpu2.GetFrequency();
cpu2.GetVoltage();
cpu2.SetRank('C');
cpu2.SetFrequency(4400);
cpu2.SetVoltage(50);
cpu2.Run();
cpu2.Stop();
}
(2)声明一个Student类,在该类中包括两个数据成员name(姓名)和score(分数)、两个静态数据成员total_score(学生总分)和count(学生人数);还包括两个成员函数show()用于输出学生的姓名、成绩和account( )用于设置分数、累计学生的成绩之和、累计学生人数,一个静态成员函数sum( )用于返回学生的成绩之和,另一个静态成员函数average( )用于求全班成绩的平均值。在main( )函数中,输入某班同学的姓名和成绩,输出所有学生的姓名和成绩,并调用上述函数求出全班学生的成绩之和和平均值。
#include<iostream>
#include<string>
using namespace std;
class Student
{
private:
string name;
int score;
int math;
int english;
int computer;
int sums;
int ave;
int j=1;
static int total_score;
static int count;
public:
Student()
{
}
string getname(string name);
int show();
void account(int m,int e,int c);//设置分数、累计学生的成绩之和、累计学生人数
int outcount();
static int sum();//返回学生的成绩之和
static int average();//用于求全班成绩的平均值
};
int Student::total_score;
int Student::count;
string Student::getname(string n)
{
name=n;
return name;
}
Student::show()
{
cout<<"name:"<<name<<endl;
cout<<"math:"<<math<<endl;
cout<<"english:"<<english<<endl;
cout<<"computer:"<<computer<<endl;
cout<<"personal total_score:"<<sums<<endl;
cout<<"personal average:"<<sums/3<<endl;
cout<<"---------------------------------"<<endl;
cout<<"class total_score:"<<sum()<<endl;
cout<<"total average:"<<average()<<endl;
cout<<"total count:"<<outcount()<<endl;
return 0;
}
void Student::account(int m,int e,int c)
{
math=m;
english=e;
computer=c;
sums=math+english+computer;
total_score=total_score+sums;
count++;
}
Student::sum()
{
return total_score;
}
Student::average()
{
return total_score/count;
}
Student::outcount()
{
return count;
}
int main()
{
Student stu[100];
int i,n=0,j=1;
string name;
int math;
int english;
int computer;
int score;
while(1)
{
cout<<"请决定是否继续输入学生信息,若继续则输入非0数字,若退出请输入0:";
cin>>i;
cout<<endl;
cout<<"-----------------------------------------------------------------" <<endl;
if(i!=0)
{
cout<<j<<':' <<endl;
cout<<"scanf name:";
cin>>name;
cout<<"scanf score of math:";
cin>>math;
cout<<"scanf score of english:";
cin>>english;
cout<<"scanf score of computer:";
cin>>computer;
stu[n].getname(name);
stu[n].account(math,english,computer);
stu[n].sum() ;
stu[n].average();
n=n+1;
j++;
}
else
{
cout<<"Student information:"<<endl;
for(i=0;i<n;i++)
{
stu[i].show();
cout<<endl;
cout<<endl;
}
return 0;
}
}
}
(3)声明一个Car类,在该类中包括数据成员color(颜色)、speed(速度)和成员函数Input( )用于输入color和speed,利用友元函数Output()输出Car类对象数据。
#include<iostream>
#include<string>
using namespace std;
class car
{
private:
string colar;
int speed;
public:
string input(string colar);
int input(int speed);
friend int output(car c1);
};
string car::input(string cloar)
{
return colar;
}
int car::input(int speed)
{
return speed;
}
int output(car c1)
{
cout<<"colar:"<<c1.colar<<endl;
cout<<"speed:"<<c1.speed<<endl;
}
int main()
{
car c1;
string colar;
int speed;
cout<<"Please scanf colar:";
cin>>colar>>speed;
cout<<endl;
c1.input(colar);
c1.input(speed);
output(c1);
return 0;
}
(4)声明日期Date类,包含数据成员year(年)、month(月)、day(日);人员Person类,包含数据成员id(编号)、name(姓名)、sex(性别)、birthday(出生日期),其中birthday定义为Date类内嵌子对象。用成员函数实现对人员信息的录入和显示。
/*声明日期Date类,
包含数据成员year(年)、month(月)、day(日);
人员Person类,包含数据成员id(编号)、name(姓名)、sex(性别)、birthday(出生日期),
其中birthday定义为Date类内嵌子对象。
用成员函数实现对人员信息的录入和显示。*/
#include<iostream>
#include<string>
using namespace std;
class Person
{
private:
string id;
string name;
string sex;
public:
Person()
{
}
Person(string i,string n,string s)
{
id=i;
name=n;
sex=s;
}
void p();
void get(string i,string n,string s);
};
void Person::get(string i,string n,string s)
{
id=i;
name=n;
sex=s;
}
void Person::p()
{
cout<<"身份证号:"<<id<<endl;
cout<<"姓名:"<<name<<endl;
cout<<"性别:"<<sex<<endl;
}
class Date
{
private:
Person birthday;
int year;
int month;
int day;
public:
Date()
{
}
Date(string i,string n,string s,int y,int m,int d):year(y),month(m),day(d),birthday(i,n,s)
{
}
void p();
void get(int y,int m,int d);
};
void Date::p()
{
//birthday.p();
cout<<"出生日期:"<<year<<'.'<<month<<'.'<<day<<endl;
}
void Date::get(int y,int m,int d)
{
year=y;
month=m;
day=d;
}
int main()
{
Person p[100]={Person("111","shengqiangshi","nan")};
Date d[100]={Date("111","shengqiangshi","nan",2021,1,54)};
string id;
string name;
string sex;
int year;
int month;
int day;
int i,j=1;
while(1)
{
cout<<"-------------------------------------"<<endl;
cout<<"请输入i的值(数字),如果退出则输入0:";
cin>>i;
if(i)
{
cout<<"-------------------------------------"<<endl;
cout<<"请输入身份证号:" ;
cin>>id;
cout<<"请输入姓名:";
cin>>name;
cout<<"请输入性别:";
cin>>sex;
cout<<"请输入出生年份:";
cin>>year;
cout<<"请输入出生月份:";
cin>>month;
cout<<"请输入出生日:";
cin>>day;
p[j].get(id,name,sex);
d[j].get(year,month,day);
j++;
}
else
{
for(i=0;i<j;i++)
{
cout<<"-------------------------------------"<<endl;
p[i].p();
d[i].p();
cout<<endl;
cout<<"-------------------------------------"<<endl;
}
return 0;
}
}
}
推荐几款学习编程的网站
免费在线开发平台(https://docs.ltpp.vip/LTPP/)
探索编程世界的新天地,为学生和开发者精心打造的编程平台,现已盛大开启!这个平台汇集了近4000道精心设计的编程题目,覆盖了C、C++、JavaScript、TypeScript、Go、Rust、PHP、Java、Ruby、Python3以及C#等众多编程语言,为您的编程学习之旅提供了一个全面而丰富的实践环境。
在这里,您不仅可以查看自己的代码记录,还能轻松地在云端保存和运行代码,让编程变得更加便捷。平台还提供了私聊和群聊功能,让您可以与同行们无障碍交流,分享文件,共同进步。不仅如此,您还可以通过阅读文章、参与问答板块和在线商店,进一步拓展您的知识边界。
为了提升您的编程技能,平台还设有每日一题、精选题单以及激动人心的编程竞赛,这些都是备考编程考试的绝佳资源。更令人兴奋的是,您还可以自定义系统UI,选择视频或图片作为背景,打造一个完全个性化的编码环境,让您的编程之旅既有趣又充满挑战。
免费公益服务器(https://docs.ltpp.vip/LTPP-SHARE/linux.html)
作为开发者或学生,您是否为搭建和维护编程环境而困扰?现在,有一款免费的公共服务器,内置多种编程语言的编程环境,并且配备了在线版VS Code。让您可以随时随地在线写代码,无需复杂配置,专注于开发和学习。(PS:毕竟是免费公共的服务器,任何人都能够使用,为了数据隐私和安全,请勿上传重要数据,仅用于学习)
免费公益MYSQL(https://docs.ltpp.vip/LTPP-SHARE/mysql.html)
作为一名开发者或学生,您是否常常为数据库环境的搭建而烦恼?是否因为预算有限而无法使用高性能的数据库服务?现在,有一款免费的MySQL服务器,专为开发者和学生量身打造,让你轻松无忧地进行开发和学习!内置在线phpmyadmin管理面板,方便用户查看数据。(PS:毕竟是免费公共的MYSQL,任何人都能够使用,为了数据隐私和安全,请勿上传重要数据,仅用于学习)
免费在线WEB代码编辑器(https://docs.ltpp.vip/LTPP-WEB-IDE/)
无论你是开发者还是学生,编程环境的搭建和管理可能会占用你宝贵的时间和精力。现在,有一款强大的免费在线代码编辑器,支持多种编程语言,让您可以随时随地编写、调试和运行代码,提升编程效率,专注于创意和开发。
免费二维码生成器(https://docs.ltpp.vip/LTPP-QRCODE/)
无论是企业宣传、活动推广,还是个人信息分享,二维码都是一种快速、高效的信息传递方式。现在,有一款功能强大的二维码生成器,不仅易于使用,还具备多种便捷功能,帮助您更轻松地生成和管理二维码。