gujiayue
c++中explict关键字的说明和使用
先看下面这一个简单的代码吧
1
#include <iostream>
2
using
namespace
std;
3
class
my
4
{
5
private
:
6
int
t;
7
public
:
8
my(){};
9
my(
int
i):t(i){};
10
int
get
()
11
{
12
return
t;
13
}
14
void
print(my d)
15
{
16
cout<<d.
get
()<<endl;
17
}
18
};
19
20
int
main()
21
{
22
my t;
23
int
i=3;
24
t.print(i);
25
return
0;
26
}
main函数中t.print(i);的调用,my类里面print函数接受的数据类型的my,不是int,但这段程序仍然能够正常运行,是因为my类里面存在一个只有一个形参的构造函数。
当在一个需要my类型对象的地方(比如print函数,就需要一个my类型对象),但是如果却没有给一个my类型对象,给了一个其他类型的对象,比如int,那么这个时候就会看这个类有没有定义一个只接受一个参数的构造函数,而且这个形参必须是int,然后构造出一个my类型临时对象,再把这个临时对象给需要my类对象的地方,完成一种隐式的转换。
注意:如果这个类有一个接受一个参数的构造函数,但是这个参数的类型比如是string,这个隐式转换肯定就不会发生了,编译时会提示错误。
总之,隐式转换会发生在,本来需要一个这种类对象的时候,却给了一个其他的数据类型,而且类也恰好有一个只接受一个这种数据类型参数的构造函数,就会先调用这个构造函数生成一个临时对象,接着将这临时对象用于需要这种类对象的地方。
但是很多时候,这种隐式转换会带来很大的麻烦,因此如果自己定义的类中,有一个只接受一个参数的构造函数,
除非有一个好理由允许构造函数被用于隐式类型转换,否则
那么就要在这个构造函数前面加一个关键词 explicit,表明不会发生隐式转换。
posted on 2012-09-19 18:15
古月
阅读(578)
评论(0)
编辑
收藏
引用
所属分类:
C/C++
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
输入输出缓冲区和流的概念理解
c++中explict关键字的说明和使用
再谈下声明、定义、初始化、赋值和extern
新学到的有关cin输入流的特点、用法
鄙人这辈子编写的第一个游戏程序:猜拳! 好激动,共享下c++源代码
字符串操作函数中的参数问题
fopen函数的使用的几种方式
linux环境下调试有关涉及到条件编译的c程序的小用法
宏定义的用法详解
网站导航:
博客园
IT新闻
BlogJava
博问
Chat2DB
管理
Powered by:
C++博客
Copyright © 古月
<
2014年7月
>
日
一
二
三
四
五
六
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
导航
C++博客
首页
新随笔
联系
聚合
管理
统计
随笔 - 24
文章 - 3
评论 - 22
引用 - 0
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
给我留言
查看公开留言
查看私人留言
随笔分类
C/C++(9)
(rss)
Linux(2)
(rss)
非技术类(1)
(rss)
离散数学及其应用(3)
(rss)
随笔档案
2016年5月 (2)
2014年7月 (1)
2012年9月 (3)
2012年6月 (1)
2012年5月 (1)
2012年1月 (1)
2011年12月 (2)
2011年10月 (2)
2011年9月 (2)
2011年6月 (7)
2011年5月 (2)
文章档案
2010年11月 (3)
C++/C
C++编程对缓冲区的理解
本文介绍的是C++中缓冲区的基本知识,包括概念、类型和一些针对性的例子,希望对大家有帮助,一起来看。
C++命名空间解释
对命名空间一个很好的解释
C++中的类模板详细讲述
C++中的类模板详细讲述,非常详细不错
搜索
积分与排名
积分 - 50931
排名 - 442
最新评论
1. re: 病狗
评论内容较长,点击标题查看
--胡涛锦
2. re: 最近很火的50只狗,有好狗有病狗,去判断有几只病狗的的逻辑推理题目
你的这个解释没有看明白,为什么第一天大家都没有杀狗,自己的狗就是病狗呢@开心
--古月
3. re: 最近很火的50只狗,有好狗有病狗,去判断有几只病狗的的逻辑推理题目
做这问题,肯定是要假设狗主人都是头脑清楚的,知道什么时候该杀狗,否则题目没有做了@chen sir
--古月
4. re: 最近很火的50只狗,有好狗有病狗,去判断有几只病狗的的逻辑推理题目
评论内容较长,点击标题查看
--chen sir
5. re: 最近很火的50只狗,有好狗有病狗,去判断有几只病狗的的逻辑推理题目
第一天大家都看到49只病狗,说明除自己的狗,其他人全部都是病狗,第一天大家都没有杀狗,说明自己的狗也是病狗,第二天就应该杀50条狗!@古月
--开心
阅读排行榜
1. 最近很火的50只狗,有好狗有病狗,去判断有几只病狗的的逻辑推理题目(13099)
2. 用数学来推导趣味逻辑题:骑士与流氓问题。(5299)
3. 鄙人这辈子编写的第一个游戏程序:猜拳! 好激动,共享下c++源代码(3869)
4. 再谈下声明、定义、初始化、赋值和extern(3675)
5. fopen函数的使用的几种方式(3271)
评论排行榜
1. 最近很火的50只狗,有好狗有病狗,去判断有几只病狗的的逻辑推理题目(11)
2. 鄙人这辈子编写的第一个游戏程序:猜拳! 好激动,共享下c++源代码(7)
3. 用数学来推导趣味逻辑题:骑士与流氓问题。(3)
4. 输入输出缓冲区和流的概念理解(0)
5. 好久不来cppblog,为什么现在网站人气如此凋零!难道c++真的要灭亡了吗?(0)