一、题目
请在下列代码基础上增加或修改如下功能:
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型,系统会自动往高精度转化