LHL'S 实验4. 类和对象(二)

6-1 Tree类的构造函数和成员函数 (10分)

定义一个Tree(树)类,有成员ages(树龄),不带参数的构造函数对ages初始化为1,成员函数grow(int years)对ages加上years,age()显示tree对象的ages的值。

Tree类声明如下:
class Tree {
public:
Tree();//构造函数
void grow(int years);//对数龄ages加上years
void age();//显示数龄ages的值
private:
int ages;//树龄
};

请实现Tree类的构造函数和成员函数。

裁判测试程序样例:
#include
using namespace std;

class Tree {
public:
Tree();//构造函数
void grow(int years);//对数龄ages加上years
void age();//显示数龄ages的值
private:
int ages;//树龄
};

int main()
{
Tree tree;
int years;
cin >> years;
tree.grow(years);
tree.age();

return 0;

}

/* 你的代码将被嵌在这里 */

输入样例:
30

输出样例:
31

Tree::Tree()//构造函数
{
  ages=1;
}
 void Tree::grow(int years)//对数龄ages加上years
{
   ages+=years;
}
 void Tree::age()//显示数龄ages的值
{
   cout<<ages;
   }

7-1 类的定义final (20分)

定义一个类DDate,内有数据成员year、month和day,分别代表年、月、日,并若干有成员函数:构造函数用于初始化数据成员,isLeap函数用于闰年的判断。编写主函数:创建日期对象,判断该年是否是闰年。

以上类名和函数名,均须按照题目要求,不得修改

输入格式:
每组测试数据仅包含一个测试用例,每个测试用例占一行包括三个数,分别表示年、月、日。

输出格式:
如果该年是闰年则输出yes,不是则输出no。

输入样例:
2006 3 5

输出样例:
no

#include 
using namespace std;

class DDate 
{//LHL
	int year,month,day;
	public:
	void init(int y,int m,int d)
	{//LHL
		year=y;
		month=m;
		day=d;
	}
	int  isLeap()
	{
		if(year%4==0&&year%100!=0||year%100==0)
		return 1;
		else return 0;	
	}//LHL

	
};

int main()
{
    DDate date;//LHL
    int year,month,day;
    cin>>year>>month>>day;
    date.init(year,month,day);
    if(date.isLeap())
    printf("yes");
    else printf("no");
    
    return 0;
}


7-2 设计带构造函数的Dog类 (20分)
题目内容:

设计一个Dog类,包含name、age、sex和weight等属性,在有参数的构造函数中对数据成员进行初始化。

公有成员函数有:GetName()、GetAge()、GetSex()和GetWeight()可获取名字、年龄、性别和体重。

编写成员函数speak() 显示狗的叫声。

编写主函数,输入狗的名字、年龄、性别和体重;声明Dog对象并用输入的数据通过构造函数初始化对象,通过成员函数获取狗的属性并显示出来。

输入格式:
狗的信息

输出格式:
狗的信息,外加叫声

输入样例:
jack 3 m 2.1

输出样例:
jack
3
m
2.1
wang!wang!

#include  //LHL
#include  
using namespace std;  
class Dog  
{  
    char name[20];  
    int age;  
    char sex;  
    double weight;  
public:  
    void setdata(char* name, int age,char sex,double weight);     
    void GetName();    
    void GetAge();    
    void GetSex();    
    void GetWeight();   
    void speak(){cout<<"wang!wang!"<<endl;}  
};  
void Dog::setdata(char* _name, int _age, char _sex, double _weight)    
{    
    strcpy(name, _name);    
    age = _age;    
    sex = _sex;    
    weight = _weight;    
}    

void Dog::GetAge()    //LHL
{    
    cout << age <<endl;    
}    

void Dog::GetName()    
{    
    cout << name <<endl;    
}    

void Dog::GetSex()    
{    
    cout <<sex<< endl;  }  
void Dog::GetWeight()    
{    
    cout <<weight<<endl;    
}    

int main()  
{  
    Dog dog;  
    char name[20], sex;  
    int age;  
    double weight;  
    cin>>name>>age>>sex>>weight;  
    dog.setdata( name, age, sex, weight);  
    dog.GetName();    //LHL
    dog.GetAge();    
    dog.GetSex();    
    dog.GetWeight();   
    dog.speak();  
    return 0;  
}  

7-3 设计并测试一个椭圆类 (20分)
题目内容:

设计并测试一个名为Ellipse的椭圆类,其属性为圆心坐标及长半轴和短半轴的长度。

设计一个构造函数(Ellipse(int,int,double,double))对这些属性进行初始化,并通过成员函数计算出椭圆的面积(double Area())。

提示:S(椭圆面积)=PI(圆周率)×a(长半轴)×b(短半轴), 其中PI取3.14

输入格式:
圆心坐标、长半轴和短半轴的长度

输出格式:
椭圆的面积

输入样例:
0 0 2 5

输出样例:
在这里给出相应的输出。例如:

31.4

#include
using namespace std;
class Ellipse
{
private://LHL
    int coreX;
    int coreY;
    double a;
    double b;
    const double PI = 3.14;
public:
    Ellipse(int _coreX,int _coreY,double _a,double _b)
    {
        coreX = _coreX;
        coreY = _coreY;
        a = _a;
        b = _b;//LHL
    }
    double Area(double aa,double bb)
    {
        return a*b*PI;
    }
};


int main()
{
    int coreX,coreY;
    double a,b;
    cin>>coreX>>coreY>>a>>b;
    Ellipse e(coreX,coreY,a,b);
    cout<<e.Area(a,b)<<endl;
    return 0;
}

7-4 设计一个多功能的MyTime类 (30分)
题目内容:

设计一个多功能的MyTime类,设计多个重载的构造函数,可以设置时间,进行时间的加减运算,按各种可能的格式(24小时制、12小时制)输出时间。

注意:

(1)请考虑设置的时间的合理性(时0-23; 分0-59;秒0-59)。

(2)12小时制中,12:00:00前为AM, 12:00:00及以后为PM

(3)加减运算的加数、减数是一个时间的长度,单位为“时、分、秒”

(4)构造函数:没参数时,设置时间为0时 0分 0秒;有参数时,设置成给定的时、分、秒。

在主函数中

(1)声明两个对象t1,t2,并通过构造函数初始化它们(t2初始化为为8:10:30)

(2)显示按12、24小时制显示t1、t2的时间。

(3)再设置t1的时间,数据由用户输入。

(4)再输入待加减的时间。

(5)t1加输入的时间,并按12小时和24小时制显示。

(6)t2减输入的时间,并按12小时和24小时制显示。

输入格式:
第一行为t1的时间,第二行为待加减的时间

输出格式:
显示按12、14小时制显示t1、t2的初始时间

t1加输入的待加减的时间按12小时和24小时制显示。

t2减输入的待加减的时间按12小时和24小时制显示

输入样例:
10 25 35
3 50 25

输出样例:
00:00:00 AM
00:00:00
08:10:30 AM
08:10:30
02:16:00 PM
14:16:00
04:20:05 AM
04:20:05

#include
using namespace std;
class MyTime
{
private:
    int hour;
    int minute;
    int second;
public:
    MyTime()
    {
        hour = 0;
        minute = 0;
        second = 0;
    }
    MyTime(int _hour, int _minute, int _second)
    {
        hour = _hour;//LHL
        minute = _minute;
        second = _second;
    }
    void SetTime(int _hour, int _minute, int _second)
    {
        hour = _hour;
        minute = _minute;
        second = _second;
    }
    void addTime(int h,int m,int s)
    {
        hour += h;
        minute += m;
        second += s;
        if(second>=60)
        {
            second = second -60;
            minute = minute + 1;
        }
        if(minute>=60)
        {
            minute = minute - 60;
            hour = hour + 1;
        }
        if(hour>=24)
        {//LHL
            hour = hour -24;
        }
    }
    void reduceTime(int _h,int _m,int _s)
    {
        if(second<_s)
        {
            second += 60;
            minute --;
        }
        if(minute<_m)
        {
            minute += 60;
            hour --;
        }
        if(hour<_h)
        {
            hour = hour + 24;
        }
        hour -= _h;//LHL
        minute -= _m;
        second -= _s;
    }
    void 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 print_24()
    {
        if(hour<10){
            cout<<'0';
        }
        cout<<hour<<':';
        if(minute<10){
            cout<<'0';//LHL
        }
        cout<<minute<<':';
        if(second<10){
            cout<<'0';
        }
        cout<<second<<endl;
    }
};


int main()
{
    MyTime t1;
    MyTime t2(8,10,30);
    t1.print_12();
    t1.print_24();
    t2.print_12();//LHL
    t2.print_24();
    int h1,m1,s1,h2,m2,s2;
    cin>>h1>>m1>>s1;
    t1.SetTime(h1, m1, s1);
    cin>>h2>>m2>>s2;
    t1.addTime(h2,m2,s2);
    t2.reduceTime(h2, m2, s2);
    t1.print_12();
    t1.print_24();//LHL
    t2.print_12();
    t2.print_24();
    return 0;
}

函数第1题体会: 需要Tree初始化ages为1,grow加上输入的年,age输出数值
第1题体会: 这题可以在头部初始化,年月日,定义一个函数判断闰年,是返回1不是返回0,输出即可
第2题体会: 这题的name可以用string或char,个人觉得string方便些,可以全部头部初始化,但是sex理论上还是用char比较好,string也行,初始化完成,以此输出,最后再输出wang!wang!即可
第3题体会: 这题可以再头文件后定义一个常量pi #define pi 3.14 ,这样计算面积时比较方便,同样可以用头部初始化比较简洁些
第4题体会:这题与上一小节的Time比较相似,头部初始化0:0:0,最重要的是加与减。
其中比较简单的是加,先从秒开始,大于60,则分钟++,分钟大于60,则小时++,
然后是减法,需要先判断谁大谁先,从小时开始比较,到秒钟,大的放在前面,然后从秒钟开始相减,秒钟小于0,则分钟–,分钟小于0,则小时–,最后输出即可

你可能感兴趣的:(LHL'PTA,编程语言,c++)