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

//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_
C++

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

在C++中,接受一个参数的构造函数,为将该类型与该参数相同的值转换为类,也就是说可以将doule类型的值转换为Swonewt类型
Swonewt(double lbs);
比如Swonewt(19.6);通过创建一个临时对象,并且将19.6做欸初始值,随后,采用逐成员赋值的方式将该临时对象的内容赋值到对象中去,这一过程称为隐式转换
需要注意的是只接受一个参数的构造函数才可以称为转换函数,但是有时候我们并不需要自动转换,会导致意外的转换,因此,C++新增了新的关键字explicit 用来关闭自动转换的特性 即
explicit Stonewt(double lbs); 无法隐式转换,但是可以强制转换

C++编程学习

友元

2024-11-14 22:39:56

C++编程学习

C++ 类的静态成员

2024-11-14 22:45:34

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索