构造函数自动转换与explicit关键字
来源:互联网 发布:证券交易网络 编辑:程序博客网 时间:2024/05/22 09:41
在类中有一个整型的数据成员,程序中需要实现一个整数直接赋值为一个类对象,赋值结果是该类对象的被赋值成员值为赋值的整数。
但是在默认情况下是不能通过编译的,因为不允许类与整数进行复制运算。
如果在类中定义一个特殊的构造函数,这样在进行该类对象和整数赋值运算时将自动转换该构造函数。
即下图定义构造函数——CUser(int nData)
可以实现一个整数直接赋值为一个类对象的语句——CUser User = 2;
语句“CUser User = 2;”实际是调用了CUser(int nData)构造函数,它与“CUser User(2);”语句的作用相同。
#include<iostream>#include<string>using namespace std;const int MAXLEN = 128;class CUser {private: char m_Username[MAXLEN]; char m_Password[MAXLEN]; int m_nLevel;public: CUser() { m_nLevel = 1; strcpy(m_Username, "MR"); strcpy(m_Password, "KJ"); cout << "构造函数被调用!" << endl; } CUser(int nData) { m_nLevel = nData; cout << "复制对象!" << endl; } void GetData() { cout << m_nLevel; }};int main(int argc, char* argv[]) { CUser User = 2; cout << "m_nLevel="; User.GetData(); cout << endl; return 0;}
当然在开发应用程序时,有时需禁止构造函数的自动转换功能,因为这样容易令人误解,容易出现问题。
在构造函数前使用explicit关键字,可以阻止构造函数的自动转换功能。
#include<iostream>#include<string>using namespace std;const int MAXLEN = 128;class CUser {private: char m_Username[MAXLEN]; char m_Password[MAXLEN]; int m_nLevel;public: CUser() { m_nLevel = 1; strcpy(m_Username, "MR"); strcpy(m_Password, "KJ"); cout << "构造函数被调用!" << endl; } explicit CUser(int nData) { m_nLevel = nData; cout << "复制对象!" << endl; } void GetData() { cout << m_nLevel; }};int main(int argc, char* argv[]) { //CUser User = 2; 不能通过编译。 CUser User(2); cout << "m_nLevel="; User.GetData(); cout << endl; return 0;}
此时,语句 “CUser User = 2;”将无法通过编译,而语句“CUser User(2);”是完全合法的。
使用语句 “CUser User = 2;”将会出现下图的错误提示
阅读全文
0 0
- 构造函数自动转换与explicit关键字
- 关键字explicit与构造函数
- C++中的转换函数、explicit关键字与non-explicit-one-argument构造函数
- C++基础---构造函数与关键字explicit
- explicit 关键字修饰构造函数
- 拷贝构造函数、explicit关键字
- 关键字explicit修饰构造函数
- C++构造函数explicit关键字
- 从Qt谈到C++(一):关键字explicit与构造函数
- c++ explicit关键字 函数转换
- explicit 与 构造函数 (防止隐式转换)
- 转换函数 与 explicit
- C++的隐式转换和explicit关键字---用于防止构造函数隐式转换
- c++的转换构造函数和杜绝隐式类型转换的explicit关键字
- C++ explicit关键字应用于构造函数
- 构造函数的explicit关键字声明
- C++ explicit关键字应用于构造函数
- C++ explicit关键字应用于构造函数
- 【T.I.J】Map通过关联数组的简单实现
- 【iOS开发】UIViewController的生命周期
- ubuntu下安装oracle11的详细过程
- 占位2
- 拉勾专业算法能力测评-汇总
- 构造函数自动转换与explicit关键字
- 数学建模--转移矩阵
- 6月13日云栖精选夜读:数梦工场完成A轮7.5亿融资 三个维度构建“新型互联网”
- CListCtrl的用法总结
- oracle orion测试工具的使用
- “天眼”系统在视频智能分析方面的实战应用
- gradle多渠道打包
- [ssh] 免密码登陆设置
- redis学习日志四(api-全局命令)