构造函数的三个作用
1.构造对象
2.对象初始化
3.类型转换 

//Test1.h
#include<iostream>
using namespace std;
//构造对象
//初始化对象
//类型装换
class ST
{
private:
int a;
long b;
public:
ST(int a=0);//缺省的构造函数只允许有一个
ST(long b);
ST(int a, long b);
~ST()
{
cout<<"ST was Free. "<<this<<endl;
}
operator int();
operator long();
int Get_a();
void fill(int a, long b);
};
ST::ST(int a)
{
cout<<"ST was Built. "<<this<<endl;
this->a = a;
}
ST::ST(int a, long b)
{
cout<<"ST was Built. "<<this<<endl;
this->a = a;
this->b = b;
}
ST::ST(long b)
{
cout<<"ST was Built. "<<this<<endl;
this->b = b;
}
ST::operator int()
{
return this->a;
}
ST::operator long()
{
return this->b;
}
int ST::Get_a()
{
return this->a;
}
void ST::fill(int a, long b)
{
this->a = a;
this->b = b;
}

 

//Test.cpp
#include<iostream>
#include"Test1.h"
using namespace std;
void main()
{
ST st;
int a1,a2,a = 100;
long b1,b = 1000;
st = a;//此处为一个隐式转换,产生了一个中间变量,构造函数使a转换为ST类型,然后用此中间变量给st.a赋值
//这样的强制转换是对构造函数有要求的,若构造函数无参数或者其参数有多个则不能进行转换
a = 101;//值得关注的一个问题是,a被构造函数转换并赋值给st.a后,其便会被析构掉,不需要等到程序结束
st = (ST)a;//也可以将其显式的写出来,只要其构造函数无explicit前缀,则显式隐式都可以,若含有exitplic前缀则必须显式类型转换
st = b;//有两个重载的构造函数可以进行转换,转化时系统可由构造函数参数列表自动识别为其选择构造函数
//由于是st接收转换类型后的b值,若构造函数内仅对一个私有数据成员进行赋值,则其他私有成员皆为随机值
//这也就是为何st先接收a的赋值,再接收b的赋值后其私有数据成员st.a变为随机值的原因 st.fill(10,20);
a1 = st;//C++没有默认的从对象到数据类型的转换,若想要转换则必须写一个方法,或者使用operator将类型转换的方法写出来
a2 = st.Get_a();//此方法和上一行的代码效果相同
b1 = st;
cout<<"a1 = "<<a1<<" a2 = "<<a2<<endl;
cout<<"b1 = "<<b1<<endl;
}

  运行结果

 

最新文章

  1. 微信支付(.NET版)
  2. cf201.div1 Number Transformation II 【贪心】
  3. Java中HashMap,LinkedHashMap,TreeMap的区别[转]
  4. JDBC和JPA调用储存过程 接收存储过程有返回值
  5. 【转载】shell中的特殊变量$
  6. Cocos2dx-Android 之Makefile通用高级写法
  7. STM32固件库文件分析
  8. Kafka设计解析(八)- Exactly Once语义与事务机制原理
  9. Hibernate学习笔记(4)---hibernate的核心接口
  10. Matlab绘图基础——colormap的使用
  11. TDX指标的理解与改造(价格到达指标线提醒)
  12. Windows Server 2012 NTP时间同步
  13. asp.net MVC 5 路由 Routing
  14. 软件测试_Linux
  15. ASP.NET 后台页面无法识别服务器控件ID
  16. Floyd算法简介
  17. EUI List列表实现人物列表 (List的Item复用,Item获取)
  18. 【理论】python使用celery异步处理请求
  19. ASP .NET CORE MVC 部署Windows 系统上 IIS具体步骤---.Net Core 部署到 IIS位系统中的步骤
  20. Python sql注入 过滤字符串的非法字符

热门文章

  1. pip 更新方法
  2. pycharm 在flask断点不停止
  3. 实验1:SDN拓扑拓扑实验
  4. Django 小实例S1 简易学生选课管理系统 10 老师课程业务实现
  5. Salesforce Consumer Goods Cloud 浅谈篇二之门店产品促销的配置
  6. 菜鸡的Java笔记 第二十三 - java 抽象类的概念
  7. vue.js学习与实战笔记(1)
  8. opa gatekeeper笔记:AdmissionReview input.request请求对象结构
  9. [gym102412D]The Jump from Height of Self-importance to Height of IQ Level
  10. [bzoj5343]混合果汁