//stonewt.h
#ifndef STONEWT_H_
#define STONEWT_H_
class Stonewt
{
private:
enum { Lbs_per_stn = 14 }; //一英石=14磅
int stone;
double pds_left;
double pounds;
public:
Stonewt(double lbs); //double类型磅的构造函数
Stonewt(int stn, double lbs); //英石、磅的构造函数
Stonewt();
~Stonewt();
void show_lbs() const; //用磅格式显示重量
void show_stn() const; //用英石格式显示重量
};
#endif // !STONEWT_H_
//stonewt.cpp
#include<iostream>
using std::cout;
#include"stonewt.h"
//double值的Stonewt对象构造函数
Stonewt::Stonewt(double lbs)
{
stone = int(lbs) / Lbs_per_stn;
pds_left = int(lbs) % Lbs_per_stn+lbs - int(lbs);
pounds = lbs;
}
//英石、double值的Stonewt对象构造函数
Stonewt::Stonewt(int stn, double lbs)
{
stone = stn;
pds_left = lbs;
pounds = stn * Lbs_per_stn + lbs;
}
Stonewt::Stonewt()
{
stone = pounds = pds_left = 0;
}
Stonewt::~Stonewt()
{
}
//用英石显示重量
void Stonewt::show_stn() const
{
cout << stone << " stone," << pds_left << " pounds\n";
}
//用磅显示重量
void Stonewt::show_lbs() const
{
cout << pounds << " pounds\n";
}
在C++中,接受一个参数的构造函数,为将该类型与该参数相同的值转换为类,也就是说可以将doule类型的值转换为Swonewt类型
Swonewt(double lbs);
比如Swonewt(19.6);通过创建一个临时对象,并且将19.6做欸初始值,随后,采用逐成员赋值的方式将该临时对象的内容赋值到对象中去,这一过程称为隐式转换
需要注意的是只接受一个参数的构造函数才可以称为转换函数,但是有时候我们并不需要自动转换,会导致意外的转换,因此,C++新增了新的关键字explicit 用来关闭自动转换的特性 即
explicit Stonewt(double lbs); 无法隐式转换,但是可以强制转换
网站标题:CV鼻祖洋芋
原创文章,作者:locus,如若转载,请注明出处:https://blog.cvpotato.cn/forward-code/c/225/
本博客所发布的内容,部分为原创文章,转载注明来源,网络转载文章如有侵权请联系站长!