构造函数、析构函数、对象数组、this指针训练

一、题目

请在下列代码基础上增加或修改如下功能:

1)带默认值或者重载的普通构造函数

2)析构函数(增加一条输出语句做测试即可)

3)将3个立方柱定义成对象数组并初始化

4)所有函数的this指针请显示使用

#include <iostream>
using namespace std;
class cube//定义类
{
public:
 //构造函数重载或者带默认值,建议二选一,允许对象传参和不传参都可以执行
 //析构函数 
    void setvalue();//输入数据成员值
    float volume();//计算体积
private:
    float length;//长、宽、高数据成员,定义成私有数据
    float width;
    float height;
};
void cube::setvalue()//cube *this 类外定义加上类名::
{
    cout<<"请输入长方柱的长、宽、高"<<endl;
    cin>>length>>width>>height;
}
float cube::volume()//类外定义函数

{
    return length*width*height;
}
int main()
{
    cube c1,c2,c3;//修改成对象数组并初始化 
    c1.setvalue();
    cout<<"该长方柱的体积为:"<<c1.volume()<<""<<endl;
    c2.setvalue();
    cout<<"该长方柱的体积为:"<<c2.volume()<<""<<endl;
    c3.setvalue();
    cout<<"该长方柱的体积为:"<<c3.volume()<<""<<endl;
    return 0;
}

 二、解题

(1)解题思路:在老师代码基础上,增加析构函数、带默认值构造函数,实现定义对象时传参自由,类内声明两个函数,并将默认值写在声明内,声明时不用写形参变量名,类外定义两个函数,析构函数输出测试语句,后带回车,使输出更美观,普通构造函数定义时使用初始化表列减短代码长度,输入函数和计算函数内用(*this).变量实现显示使用this指针,定义对象数组,三个立方体分别不传参、传全参、传部分参,测试带默认值构造函数是否正确。

(2)运行结果:

 (3)代码

#include <iostream>
using namespace std;
class cube//立方体类
{
public:
    cube(float = 1.5,float = 1.5,float = 1.5);//声明带默认值构造函数,允许对象传参和不传参都可以执行
    ~cube();//声明析构函数 
    void setvalue();//声明输入函数
    float volume();//声明计算体积函数
private:
    float length;//长、宽、高数据成员,定义成私有数据
    float width;
    float height;
};
cube:: ~ cube()//类外定义
{
    cout << "析构函数被执行……" << endl;
}
void cube::setvalue()//cube *this 类外定义加上类名::
{
    cout<<"请输入长方柱的长、宽、高"<<endl;
    cin>> (*this).length >> (*this).width >> (*this).height;
    return;
}
float cube::volume()//类外定义函数
{
    return (*this).length * (*this).width * (*this).height;
}
cube:: cube(float l,float w,float h):length(l),width(w),height(h){}//默认值在类内声明
int main()
{
    cube c[3] =
    {
        cube(),//全用默认值
        cube(2.0,2,2),
        cube(3.5)//长宽用默认值
    };
    cout<<"该长方柱的体积为:"<<c[0].volume()<<endl;
    cout<<"该长方柱的体积为:"<<c[1].volume()<<endl;
    cout<<"该长方柱的体积为:"<<c[2].volume()<<endl;
    return 0;
}

(4)总结:

①使用初始化表列时不可以在初始化表列显示使用this指针

②定义对象数组时,每个对象用逗号隔开,不用分号

③普通构造函数默认值写在声明时,普通函数都可以

④带默认值的构造函数类内声明,类外定义

⑤构造函数形参是float型,定义对象时可以传int型,系统会自动往高精度转化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值