实验4. 类和对象(一)
6-1 使用类计算矩形的面积 (10分)
定义并实现一个矩形类,有长和宽两个属性,由成员函数计算矩形的面积。
矩形类Rectang接口定义如下:
class Rectangle {
public:
void setLength(int l);//设置矩形的长度
void setWidth(int w); //设置矩形的宽度
int getArea(); //计算并返回矩形的面积
private:
int length, width; //矩形的长度和宽度
};
请实现Rectangle类的成员函数。
裁判测试程序样例:
#include
using namespace std;
class Rectangle {
public:
void setLength(int l);//设置矩形的长度
void setWidth(int w); //设置矩形的宽度
int getArea(); //计算并返回矩形的面积
private:
int length, width; //矩形的长度和宽度
};
int main()
{
Rectangle r;
int len, w;
cin >> len >> w;//LHL
r.setLength(len);
r.setWidth(w);
cout << r.getArea() << “\n”;
return 0;
}
/* 你的代码将嵌在这里 */
输入样例:
10 20
输出样例:
200
void Rectangle::setLength(int l)//设置矩形的长度
{
length=l;//LHL
}
void Rectangle::setWidth(int w) //设置矩形的宽度
{
width=w;
}
int Rectangle::getArea() //计算并返回矩形的面积
{
return width*length;
}
6-2 Point类的声明和实现 (10分)
定义一个Point类,代表平面上的一个点,其横坐标和纵坐标分别用x和y表示,设计Point类的成员函数,实现并测试这个类。 主函数中输入两个点的坐标,计算并输出了两点间的距离。请根据主函数实现Point类。
裁判测试程序样例:
#include
#include
#include
using namespace std;
//你的代码将被嵌在这里
int main()
{
Point p1, p2;
double x1, y1, x2, y2;
cin >> x1 >> y1 >> x2 >> y2;
p1.setX(x1);
p1.setY(y1);
p2.setX(x2);
p2.setY(y2);
double x = p1.getX() - p2.getX();
double y = p1.getY() - p2.getY();
double len = sqrt(x * x + y * y);
cout << fixed << setprecision(2) << len << endl;
return 0;
}
输入样例:
0 0 3 3
输出样例:
4.24
class Point{
double x;
double y;
public:
void setX(double a)
{
x=a;
}
void setY(double b)
{
y=b;
}
double getX()
{
return x;
}
double getY()
{//LHL
return y;
}
};
…
6-3 类的声明与成员函数的实现–Car类 (10分)
本题要求根据给定的Car类的声明,实现其成员函数。
类和函数接口定义:
class Car //定义类Car
{
//成员函数
public:
void disp_welcomemsg(); //显示欢迎信息
int get_wheels(); //返回汽车的车轮数量
void set_wheels(int); //设置汽车的车轮数量
//数据成员
private:
int m_nWheels; //汽车的车轮数量
};
其中,成员函数void disp_welcomemsg()显示一条欢迎信息“Welcome to the car world!”。 成员函数int get_wheels()返回Car类的私有数据成员m_nWheels。 成员函数int set_wheels(int)用指定的形参初始化数据成员m_nWheels。
裁判测试程序样例:
#include
using namespace std;
class Car //定义类Car
{
//成员函数
public:
void disp_welcomemsg(); //显示欢迎信息
int get_wheels(); //返回汽车的车轮数量
void set_wheels(int); //设置汽车的车轮数量
//数据成员
private:
int m_nWheels; //显示汽车的车轮数量
};
/* 请在这里填写答案 */
int main()
{
int n;
cin >> n;
Car mycar; //定义类对象mycar
mycar.disp_welcomemsg(); //访问成员函数,显示欢迎信息
mycar.set_wheels(n); //访问成员函数,设置车轮数量
//访问成员函数,显示车轮数量
cout << "wheels = " << mycar.get_wheels() << endl;
return 0;
}
输入样例:
4
输出样例:
Welcome to the car world!
wheels = 4
void Car::disp_welcomemsg()
{
cout<< "Welcome to the car world!" << endl;
}
int Car::get_wheels()
{
return this->m_nWheels;
}
void Car::set_wheels(int n)//LHL
{
this->m_nWheels = n;
}
```7-1 设计Person类 (20分)
设计一个Person类,包含name、age、sex属性以及对这些属性操作的方法。实现并测试这个类。
要求:(1)把name、age、sex声明为私有的数据成员,分别表示姓名、年龄、性别;
(2)定义公有的成员函数Register、ShowMe,Register函数的功能是对数据成员进行初始化,ShowMe函数的功能是输出这些数据成员。
(3)主函数中定义的对象person1通过键盘输入来得到信息,person2通过Register(“xiaoming”, 20, ‘f’) 来得到信息。
输入格式:
person1的name、age、sex值
输出格式:
person1和person2的所有属性,属性之间用空格隔开
输入样例:
zhangsan 18 m
输出样例:
zhangsan 18 m
xiaoming 20 f
#include <iostream>
#include<cstring>
using namespace std;
class Person
{
char Name[20];
int Age;//LHL
char Sex;
public:
void Register(char *name,int age,char sex);
void ShowMe();
};
void Person::Register(char *name,int age,char sex)
{
strcpy(Name,name);
Age=age;
Sex=sex;
};
void Person::ShowMe()
{
cout<<Name<<" "<<Age<<" "<<Sex<<endl;
};
int main()
{
char name[20];
int age;
char sex;
Person person1,person2;
cin>>name>>age>>sex;
person1.Register(name,age,sex);
char name2[20]="Zhang3";//LHL
person2.Register("Zhang3",19,'m');
person1.ShowMe();
person2.ShowMe();
return 0;
}
7-2 设计Dog类 (20分)
题目内容: 设计一个Dog类,包含name、age、sex和weight等属性以及对这些属性操作的方法,在主函数测试这个类。
1、根据类的封装性要求,把name、age、sex和weight声明为私有的数据成员;
2、编写公有成员函数setdata对数据进行初始化,GetName、GetAge、GetSex和GetWeight等函数获取相应属性。初始化数据由用户输入。
输入格式:
Dog类对象的初始化数据
输出格式:
根据Dog类对象的初始化数据输出Dog的属性,请严格按照格式输出,句末有点号。
输入样例1:
wangwang 2 m 3.1
输出样例1:
It is my dog.
Its name is wangwang.
It is 2 years old.
It is male.
It is 3.1 kg.
输入样例2:
dingdang 3 f 3.6
输出样例2:
It is my dog.
Its name is dingdang.
It is 3 years old.
It is female.
It is 3.6 kg.
#include <iostream>
using namespace std;
class Dog
{
private:
string name;
int age;//LHL
char sex;
double weight;
public:
void setdata(string dogName,int dogAge,char dogSex,double dogWeight)
{
name = dogName;
age = dogAge;
sex = dogSex;
weight = dogWeight;
}
string GetName()
{
return name;
}
int GetAge()
{
return age;
}
char GetSex()
{
return sex;
}
double GetWeight()
{
return weight;
}
};
int main()
{
Dog dog;
string cinName;
int cinAge;
char cinSex;//LHL
double cinWeight;
cin>>cinName>>cinAge>>cinSex>>cinWeight;
dog.setdata(cinName, cinAge, cinSex, cinWeight);
cout<<"It is my dog."<<endl;
cout<<"Its name is "<<dog.GetName()<<"."<<endl;
cout<<"It is "<<dog.GetAge()<<" years old."<<endl;
if(dog.GetSex()=='m'){
cout<<"It is male."<<endl;
}else{
cout<<"It is female."<<endl;
}
cout<<"It is "<<dog.GetWeight()<<" kg."<<endl;
return 0;
}
7-3 设计MyTime类 (30分)
题目内容: 设计一个MyTime类,成员函数SetTime()设置时间,print_12()以12(0-11)小时制显示时间(AM上午,PM下午),print_24()以24(0-23)小时制显示时间。
输入格式:
所需设置时间的时、分、秒
输出格式:
按照12小时制和24小时制依次显示时间,注意时间格式中的冒号是英文冒号,时分秒都是两位,AM,PM前有一个空格,晚上12:00是00:00:00 AM,中午十二点是00:00:00 PM。
输入样例:
13 23 34
输出样例:
01:23:34 PM
13:23:34
#include<iostream>
using namespace std;
class MyTime
{
private:
int hour;
int minute;
int second;
public:
void SetTime(int,int,int);
void print_12();
void print_24();
};
void MyTime::SetTime(int _hour,int _minute,int _second)
{
hour = _hour;
minute = _minute;
second = _second;//LHL
}
void MyTime::print_12()
{
int tempHour;
hour>=12?tempHour=hour-12:tempHour=hour;
if(tempHour<10){
cout<<'0';
}
cout<<tempHour<<':';
if(minute<10){
cout<<'0';
}
cout<<minute<<':';
if(second<10){
cout<<'0';
}
cout<<second;
if(hour>12||((hour==12)&&((minute>0)||(second>0)))){
cout<<" "<<"PM"<<endl;
}else{
cout<<" "<<"AM"<<endl;
}
}
void MyTime::print_24()
{
if(hour<10){
cout<<'0';
}
cout<<hour<<':';
if(minute<10){
cout<<'0';
}
cout<<minute<<':';
if(second<10){
cout<<'0';
}
cout<<second<<endl;
}
int main()
{
int h,m,s;//LHL
cin>>h>>m>>s;
MyTime mt;
mt.SetTime(h, m, s);
mt.print_12();
mt.print_24();
return 0;
}