你看到的这个文章来自于http://www.cnblogs.com/ayanmw
由于最近写的代码 发现有点异常,值怎么是错误的呢?明明修改了的。
经过调试,发现原来 是构造函数里面的问题。
搜索:c++ 一个构造函数 调用 另一个 构造函数
发现,原来这就是一个普遍的问题,编译器也木有给警告,其实语法完全合理,如果是java的话,应该没问题。
那么C++ 如何 从一个构造函数调用另一个构造函数呢?
应该使用下面的方法。
new (this)构造函数(不同的参数);
参考自: http://www.cnblogs.com/chio/archive/2007/10/20/931043.html
我发现问题,还 在构造函数里 return 另一个构造函数,是错误的,因为构造函数没有返回值。
但是 你的 实例却可以直接 使用 构造函数复制。哦对,类 默认 有一个 = 的 操作符。
指针 也可以 指针=new 构造函数(); 都是内存的拷贝而已了。
new 操作符 ,与之前搜索到的 new 一定要delete么? 的一些答案类似。此new 是操作符。
标准库中定位new表达式(placement new)的定义
inline void *__cdecl operator new(size_t, void *_P)
{
return (_P);
}
STL中的原型如下:
1: void * operator new (size_t, const std::nothrow_t &) throw();
2: void * operator new (size_t, void *) throw();
3: void * operator new[] (size_t, const std::nothrow_t &) throw();
4: void * operator new[] (size_t, void *) throw();
该表达式的形式如下:
发现
http://forum.ubuntu.org.cn/viewtopic.php?t=315229
所讨论的 使用this->调用 其他 构造函数 应该也可以的吧。。。
经过实验 发现 貌似也不行: 提示错误 error C2273: “函数样式转换”: 位于“->”运算符右边时非法
如果使用 private 函数 应该可以的哦。。。不尝试了。
下面的讨论中的下段资料也不错:
http://topic.csdn.net/u/20091219/18/4973528c-b6dd-4479-975d-54072cbcef9e.html
下面内容引自
http://zh.wikipedia.org/zh-cn/C%2B%2B0x#.E7.89.A9.E4.BB.B6.E5.BB.BA.E6.A7.8B.E7.9A.84.E6.94.B9.E8.89.AF
对象建构的改良
在标准C++中,建构式不能调用其它的建构式;每个建构式必须自己初始化所有的成员或是调用一个共用的成员函数。基类的建构式不能够直接作为派生类的建构式;就算基类的建构式已经足够,每个衍伸的类仍必须实做自己的建构式。类中non-constant的数据成员不能够在声明的地方被初始化,它们只能在建构式中被初始化。 C++0x将会提供这些问题的解决方案。
C++0x允许建构式调用其他建构式,这种做法称作委托或转接(delegation)。 仅仅只需要加入少量的代码,就能让数个建构式之间达成功能复用(reuse)。 Java以及C#都有提供这种功能。C++0x 语法如下:
class SomeType {
int number;
string name;
SomeType( int i, string& s ) : number(i), name(s){}
public:
SomeType( ) : SomeType( 0, "invalid" ){}
SomeType(