类的自动转换和强制类型转换

//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/

本博客所发布的内容,部分为原创文章,转载注明来源,网络转载文章如有侵权请联系站长!

(0)
上一篇 6天前
下一篇 6天前

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注