2015级C++第5周项目 类和对象

简介: 【项目1 - 三角形类雏形】[参考解答] (1)下面设计一个三角形类,请给出各成员函数的定义 class Triangle{public: void setABC(double x, double y, double z);//置三边的值,注意要能成三角形 double perimeter();//计算三角形的周长 double area

【项目1 - 三角形类雏形】

[参考解答]
(1)下面设计一个三角形类,请给出各成员函数的定义

class Triangle
{
public:
    void setABC(double x, double y, double z);//置三边的值,注意要能成三角形
    double perimeter();//计算三角形的周长
    double area();//计算并返回三角形的面积
private:
    double a,b,c; //三边为私有成员数据
};
int main()
{
    Triangle tri1;  //定义三角形类的一个实例(对象)
    tri1.setABC(4,5,6); //为三边置初值
    cout<<"三角形的周长为:"<< tri1.perimeter()<<'\t'<<"面积为:"<< tri1.area()<<endl;
    return 0;
}
//请在下面定义Triangle类中的各个成员函数

(2)在上面程序的基础上,重新定义Triangle类,其中逻辑特别简单的set和get成员函数,要处理为内联成员函数,直接在类内定义。

int main()  
{  
    Triangle tri1;  //定义三角形类的一个实例(对象)  
    double x,y,z;  
    cout<<"请输入三角形的三边:";  
    cin>>x>>y>>z;  
    tri1.setA(x);  
    tri1.setB(y);  
    tri1.setC(z);   //为三边置初值  
    if(tri1.isTriangle())  //isTriangle()返回值为布尔型,用于判断给出的三边是否能构成一个三角形
    {  
        cout<<"三条边为:"<<tri1.getA()<<','<<tri1.getB()<<','<<tri1.getC()<<endl;  
        cout<<"三角形的周长为:"<< tri1.perimeter()<<'\t'<<"面积为:"<< tri1.area()<<endl;  
    }  
    else  
        cout<<"不能构成三角形"<<endl;  
    return 0;  
}  

(3)设计三角形类带参数的构造函数,即Triangle(double x, double y, double z),三边长在调用时由实参直接给出,使对象在定义时能够进行初始化。需要的测试函数是:

int main()
{
    Triangle Tri(7,8,9);    //定义三角形类的一个实例(对象)
    Tri.showMessage(); //定义一个能显示三角形信息的成员函数
    return 0;
}

(4)使用有默认参数的构造函数,不给定实参时,默认边长为1;注意——只需要一个构造函数即可。需要的测试函数是:

int main()
{
    Triangle Tri1;   //定义边长为1 1 1的三角形类实例
    Tri1.showMessage();
    Triangle Tri2(1.5);//定义边长为1.5 1 1的三角形类实例
    Tri2.showMessage();
    Triangle Tri3(1.5,1.5);//定义边长为1.5 1.5 1的三角形类实例
    Tri3.showMessage();
    Triangle Tri4(7,8,9); //定义边长为7 8 9的三角形类实例
    Tri4.showMessage();
    return 0;
}

(5)使用复制构造函数,能用一个已有的三角形对象,复制出新的三角形对象:

int main()
{
    Triangle Tri1(3,4,5);   //定义边长为1 1 1的三角形类实例
    Tri1.showMessage();
    Triangle Tri2(Tri1); //调用复制构造函数
    Tri2.showMessage();
    return 0;
}

【项目2-游戏中的角色类】

[参考解答]
(1)基于下面设计的游戏中角色类,补充完整需要的成员函数,使角色能一定的规则行动或改变状态。下面代码中包含的是最基本的要求,可以根据你的设计进行扩充。

class Role
{
public:
    ……
private:
    string name;
    int blood;
    bool life;
};
int main( )
{
    Role mary;
    mary.setRole("Mary", 4);
    mary.show();
    mary.attack();
    mary.eat(2);
    mary.beAttack();
    mary.beAttack();
    mary.show();
    return 0;
}

(2)设计构造函数,使角色对象在创建时被初始化;设计析构函数,当角色对象被撤消时,提示一句“XXX(名称)退出江湖…”。可以用下面的代码进行测试,运行结果参考右图:

int main( )
{
    Role mary("Mary", 4);
    Role jack("Jack", 0);
    mary.show();
    jack.show();
    return 0;
}

【项目3 - 时间类】

[参考解答]
阅读、运行程序后,按要求扩充类的功能

class Time
{
public:
    void set_time( );   
    void show_time( );  
private: 
    bool is_time(int, int, int);   
    int hour;
    int minute;
    int sec;
};
void Time::set_time( ) 
{
    char c1,c2;
    cout<<"请输入时间(格式hh:mm:ss)";
    while(1)
    {    cin>>hour>>c1>>minute>>c2>>sec;
        if(c1!=':'||c2!=':')
            cout<<"格式不正确重输"<<endl;
        else if (!is_time(hour,minute,sec))
            cout<<"时间非法,请重新输入"<<endl;
        else 
            break;
    }
}
void Time::show_time( )      
{
    cout<<hour<<":"<<minute<<":"<<sec<<endl;
}
bool Time::is_time(int h,int m, int s)
{
    if (h<0 ||h>24 || m<0 ||m>60 || s<0 ||s>60)
        return false;
    return true;
}
int main( )
{
    Time t1;  
    t1.set_time( );   
    T1.show_time( );
    return 0;
}

要求:
(1)请在原类基础上,在类内增加下列成员函数(将是内联成员函数)

  • add_a_sec() //增加1秒钟
  • add_a_minute() //增加1分钟
  • add_an_hour() //增加1小时

在main()数中,调用新增加的成员函数,以测试扩充后的功能。
(2)再增加三个成员函数,要求在类内声明,类外定义。

  • add_seconds(int) //增加n秒钟
  • add_minutes(int) //增加n分钟
  • add_hours(int) //增加n小时

提示:

  • 要考虑增加后超出取值范围的情形;
  • 增加n秒后,秒数可能会超过60,调整秒数,并可以调用增加分钟数的成员函数,使时间合法;同理,增加分钟数也有类似问题。

【项目4 - 长方柱类】

[参考解答]
  编写基于对象的程序,求3个长方柱(Bulk)的体积。数据成员包括长(length)、宽(width)、高(heigth)、体积,要求设计成员函数实现下面的功能:
(1)由键盘输入3个长方柱的长、宽、高;
(2)计算长方柱的体积(volume)和表面积(areas);
(3)输出这3个长方柱的体积和表面积。

目录
相关文章
|
23天前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
38 2
|
29天前
|
存储 编译器 C++
【c++】类和对象(下)(取地址运算符重载、深究构造函数、类型转换、static修饰成员、友元、内部类、匿名对象)
本文介绍了C++中类和对象的高级特性,包括取地址运算符重载、构造函数的初始化列表、类型转换、static修饰成员、友元、内部类及匿名对象等内容。文章详细解释了每个概念的使用方法和注意事项,帮助读者深入了解C++面向对象编程的核心机制。
83 5
|
1月前
|
存储 编译器 C++
【c++】类和对象(中)(构造函数、析构函数、拷贝构造、赋值重载)
本文深入探讨了C++类的默认成员函数,包括构造函数、析构函数、拷贝构造函数和赋值重载。构造函数用于对象的初始化,析构函数用于对象销毁时的资源清理,拷贝构造函数用于对象的拷贝,赋值重载用于已存在对象的赋值。文章详细介绍了每个函数的特点、使用方法及注意事项,并提供了代码示例。这些默认成员函数确保了资源的正确管理和对象状态的维护。
80 4
|
1月前
|
存储 编译器 Linux
【c++】类和对象(上)(类的定义格式、访问限定符、类域、类的实例化、对象的内存大小、this指针)
本文介绍了C++中的类和对象,包括类的概念、定义格式、访问限定符、类域、对象的创建及内存大小、以及this指针。通过示例代码详细解释了类的定义、成员函数和成员变量的作用,以及如何使用访问限定符控制成员的访问权限。此外,还讨论了对象的内存分配规则和this指针的使用场景,帮助读者深入理解面向对象编程的核心概念。
86 4
WK
|
1月前
|
机器学习/深度学习 人工智能 算法
那C++适合开发哪些项目
C++ 是一种功能强大、应用广泛的编程语言,适合开发多种类型的项目。它在游戏开发、操作系统、嵌入式系统、科学计算、金融、图形图像处理、数据库管理、网络通信、人工智能、虚拟现实、航空航天等领域都有广泛应用。C++ 以其高性能、内存管理和跨平台兼容性等优势,成为众多开发者的选择。
WK
75 1
|
2月前
|
存储 安全 C++
【C++打怪之路Lv8】-- string类
【C++打怪之路Lv8】-- string类
26 1
|
2月前
|
存储 编译器 对象存储
【C++打怪之路Lv5】-- 类和对象(下)
【C++打怪之路Lv5】-- 类和对象(下)
31 4
|
2月前
|
编译器 C语言 C++
【C++打怪之路Lv4】-- 类和对象(中)
【C++打怪之路Lv4】-- 类和对象(中)
31 4
|
2月前
|
存储 编译器 C++
【C++类和对象(下)】——我与C++的不解之缘(五)
【C++类和对象(下)】——我与C++的不解之缘(五)
|
2月前
|
编译器 C++
【C++类和对象(中)】—— 我与C++的不解之缘(四)
【C++类和对象(中)】—— 我与C++的不解之缘(四)