C++中如何在一个构造函数中调用另一个构造函数
来源:互联网 发布:淘宝网哪些鞋店比较好 编辑:程序博客网 时间:2024/05/17 07:38
http://blog.chinaunix.net/uid-23741326-id-3385581.html
在C++中,一个类的构造函数没法直接调用另一个构造函数,比如:
点击(此处)折叠或打开
- #ifndef _A_H_
- #define _A_H_
- #include <stdio.h>
- #include <new>
- class A
- {
- public:
- A()
- {
- printf("In A::(). m_x=%d\n", m_x);
- A(0);
- printf("Out A::(). m_x=%d\n", m_x);
- }
- A(int x)
- {
- printf("In A::(int x). x=%d\n", x);
- m_x=x;
- }
- private:
- int m_x;
- };
这里第11行的调用A(0);只是构建了一个A的临时对象,并没有调用A(int x)来初始化自己。其运行结果是:
点击(此处)折叠或打开
- [root@tivu25 utcov]# ./UTest.out
In A::(). m_x=4268020
In A::(int x). x=0
Out A::(). m_x=4268020
正确的方法是使用placement new:
点击(此处)折叠或打开
- //A.h
- #ifndef _A_H_
- #define _A_H_
- #include <stdio.h>
- #include <new>
- class A
- {
- public:
- A()
- {
- printf("In A::(). m_x=%d\n", m_x);
- new(this) A(0);
- printf("Out A::(). m_x=%d\n", m_x);
- }
- A(int x)
- {
- printf("In A::(int x). x=%d\n", x);
- m_x=x;
- }
- private:
- int m_x;
- };
- #endif
第11行应为: new(this) A(0); 也就是用当前对象来调用构造函数A(int x)构建一个“新”对象。其运行结果是:
点击(此处)折叠或打开
- [root@tivu25 utcov]# ./UTest.out
- In A::(). m_x=4268020
- In A::(int x). x=0
- Out A::(). m_x=0
可以看出,当前对象确实被改变了。
0 0
- C++中如何在一个构造函数中调用另一个构造函数
- C++中如何在一个构造函数中调用另一个构造函数
- C++类中一个构造函数调用另一个构造函数
- C++类中一个构造函数调用另一个构造函数
- C++类中一个构造函数调用另一个构造函数
- C++学习笔记-----在一个构造函数中调用另一个构造函数
- c++:在类的构造函数中调用另一个构造函数
- 在构造函数中调用构造函数
- 在构造函数中调用构造函数
- 【C/C++】在一个类中重载另一个类的构造函数 ----构造函数是一个特殊的操作符
- C++中可以在构造函数中调用另一个构造函数吗?
- C++中可以在构造函数中调用另一个构造函数吗?
- C++中可以在构造函数中调用另一个构造函数吗?
- 【转】C++在构造函数中可以调用另一个构造函数吗
- 能否在一个构造器中调用另一个构造器
- C++:构造函数中调用虚函数
- C++:构造函数中调用虚函数
- 在成员函数中调用构造函数
- oracle存储过程
- hide developer console
- mysql优化
- CentOS下编写shell脚本自动备份数据库与网站
- jni传递对象中包含arraylist对象。
- C++中如何在一个构造函数中调用另一个构造函数
- 起步X5开发HTML5通过ajax调用WebService服务,调用的两种方式SOAP和Result
- 查看事务锁:innodb_trx + innodb_locks + innodb_lock_waits
- 欢迎使用CSDN-markdown编辑器
- android Intent Flags详解
- 图形处理(八)点云重建(上)点云滤波、尖锐特征边增采样、移除离群点
- PHP的xml操作类
- Android_Activity详解
- 详解Linux系统中的average load