关于 explicit 的一些学习
2016-01-22 16:07
387 查看
一直不太明白这个关键字到底是干什么的。后来在晚上搜索了几篇文档看了一下。
首先是这篇:《 C++中的explicit关键字》
但是还是感觉不太懂,所以自己动手敲了几段代码。
#include<iostream>
using namespace std;
class a
{
public:
char num;
char data;
a(char n,char d='n')
{
num=n;
data=d;
cout<<"this is a: "<<num<<" "<<data<<endl;
}
virtual ~a()
{
cout<<"delete a"<<endl;
}
};
class aa:public a
{
public:
aa(char n,char d):a(n,d)
{
cout<<"this is aa"<<endl;
}
~aa()
{
cout<<"delete aa"<<endl;
}
};
int main()
{
a a='a';
return 0;
}
但是如果是下面的代码:
运行结果是这样的:
其实关键点在这里:如果c++类的构造函数有一个参数,那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象。
后来在网上看到这篇文章,觉得讲的就比较清楚了。
《C++ explicit关键字应用方法详解》
首先是这篇:《 C++中的explicit关键字》
但是还是感觉不太懂,所以自己动手敲了几段代码。
#include<iostream>
using namespace std;
class a
{
public:
char num;
char data;
a(char n,char d='n')
{
num=n;
data=d;
cout<<"this is a: "<<num<<" "<<data<<endl;
}
virtual ~a()
{
cout<<"delete a"<<endl;
}
};
class aa:public a
{
public:
aa(char n,char d):a(n,d)
{
cout<<"this is aa"<<endl;
}
~aa()
{
cout<<"delete aa"<<endl;
}
};
int main()
{
a a='a';
return 0;
}
但是如果是下面的代码:
#include<iostream> using namespace std; class a { public: char num; char data; explicit a(char n,char d='n') { num=n; data=d; cout<<"this is a: "<<num<<" "<<data<<endl; } virtual ~a() { cout<<"delete a"<<endl; } }; class aa:public a { public: aa(char n,char d):a(n,d) { cout<<"this is aa"<<endl; } ~aa() { cout<<"delete aa"<<endl; } }; int main() { a a='a'; return 0; }
运行结果是这样的:
其实关键点在这里:如果c++类的构造函数有一个参数,那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象。
后来在网上看到这篇文章,觉得讲的就比较清楚了。
《C++ explicit关键字应用方法详解》
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- 解析C++中派生的概念以及派生类成员的访问属性