C++面向对象(5)
来源:互联网 发布:做淘宝电脑配置 编辑:程序博客网 时间:2024/06/08 11:35
构造函数的使用
以下代码中的输出语句为0吗?为什么?
在代码第11行,不带参数的构造函数调用了带参数的构造函数。这种调用往往被很多人误解,其实是不行的,而且往往会有副作用。可以加几条打印语句测试一下:程序执行结果:
可以看到,在带参数的构造函数里打印出来的对象地址和对象obj的地址不一致。实际上,代码14行的调用只是在栈上生成了一个临时对象,对于自己本身毫无影响。还可以发现,构造函数的相互调用引起的后果不是死循环,而是栈溢出。
构造函数explicit与普通构造函数的区别
explicit构造函数是用来防止隐式转换的。
Test1的构造函数带一个int型参数,代码第21行会隐式转换成调用Test1的构造函数。而Test2的构造函数被声明为explicit(显示),这表示不能通过隐式转换来调用这个构造函数,因此22行编译错误。
explicit构造函数的作用
show()函数的参数类型是Number类对象的引用,18行调用show(s)时采取了以下所示的步骤:
(1)show(s)中的s为short类型,其值为42,因此首先检查参数为short的构造函数能否被隐式转换。由于第9行的构造函数被声明为explicit(显示调用),因此不能隐式转换。于是进行下一步。
(2)42自动转换为int型。
(3)检查参数为int的构造函数能否被隐式转换。由于第10行参数为int的构造函数吗,没有被声明为显示调用,因此此构造函数临时构造出一个临时对象。
(4)打印上一步临时对象type的成员,即“int”
阅读全文
0 0
- C与面向对象
- C 面向对象程序设计
- c实现面向对象
- Obj-c面向对象
- JAVA面向对象C
- c面向对象设计
- c++-->面向对象
- 面向对象(C++)
- [C#] 面向对象
- c#-面向对象
- c实现面向对象
- c实现面向对象
- 面向对象的 C
- Objective C面向对象
- objective-c面向对象
- c++-面向对象类
- Objective-C 面向对象
- c实现面向对象
- window对象下open、close、opener函数的使用
- QUIC和TCP--为什么多线程下载比单线程快
- 一行或者多行垂直居中问题
- Linux下设置mysql和tomcat开机启动
- springMVC原理(一):SpringMVC入门
- C++面向对象(5)
- JZOJ2017.08.08 B组
- python 中如何实现一行输入多个值 ?
- Android基础总结五:Service总结
- 【高通6模全网通智能模块】MSM8909 ,可支持二次开发
- ORA-16032: parameter LOG_ARCHIVE_DEST_1 destination string cannot be translated
- android 获取蓝牙信号强度,连接后获取蓝牙RSSI信号强度
- 【JZOJ5328】【NOIP2017提高A组模拟8.22】世界线
- SpringMVC详细解析