先看一个错误的C++例子:
struct MY_CLASS
{
int a;
int b;
MY_CLASS(int _a, int_b)
{
this->a = a;
this->b = b;
}
MY_CLASS()
{
MY_CLASS(0, 0);
}
};
本来期望默认构造函数会初始化类为a=0, b=0, 可实际上却是个随机值。
对于C++来说,实际上MY_CLASS(0, 0);只是构造了一个临时对象,这个临时对象确实也将a, b初始化为0,但是这个临时对象在构造函数大括号结束以后生命期就结束了。MY_CLASS()是采用默认构造函数构造的另外一个对象,这个对象的内容没有初始化为0.
当然对于C++ 11来说,嵌套调用是可行的,比如:
class SomeType
{
int number;
public:
SomeType(int newNumber) : number(newNumber) {}
SomeType() : SomeType(42) {}
}
JAVA则可以直接进行构造函数嵌套调用,但要通过this进行调用,比如:
public class Person {
private String name;
private int age;
public Person() {
this("Bill", 28);
}
public Person(String n) {
this(n, 28);
}
public Person(String n, int a) {
name = n;
age = a;
}
}