你是否曾想过在成员函数中调用构造函数来实现init功能呢,如果你试过的话,你应该会记得那是不行的,如果没有,那么就要从此打消这样的念头了,下面的例子将会让你看到,其实在成员函数中调用构造函数是不会改变该对象的成员变量的值的。
#include <iostream>
using namespace std;
class A
{
public:
int i;
A():i(0){ cout<<"A():i="<<i<<endl;}
void fun();
};
void A::fun()
{
++i;
cout<<"fun(): i="<<i<<endl;
A();
}
int main()
{
A a;
a.fun();
cout<<a.i<<endl;
}
运行结果是:
A():i=0
fun(): i=1
A():i=0
1
由以上结果可以看出,在在成员函数内调用构造函数, 都只能是产生一个无名对象,并不会对原有对象的成员值造成影响。若在构造函数内调用构造函数,除了是在初始化列表中,或是编译器自动合成的(父类的或类成员的)构造函数,也不会改变该对象的成员变量的值。
那么这样做的真实效果是什么呢?其实是该构造函数产生了一个无名对象。 不要忘了,构造this指针也是构造函数的任务之一哦。
参考文章:
http://blog.vckbase.com/iwaswzq/archive/2005/06/12/6432.html
http://www.vckbase.com/document/viewdoc/?id=933
#include <iostream>
using namespace std;
class A
{
public:
int i;
A():i(0){ cout<<"A():i="<<i<<endl;}
void fun();
};
void A::fun()
{
++i;
cout<<"fun(): i="<<i<<endl;
A();
}
int main()
{
A a;
a.fun();
cout<<a.i<<endl;
}
运行结果是:
A():i=0
fun(): i=1
A():i=0
1
由以上结果可以看出,在在成员函数内调用构造函数, 都只能是产生一个无名对象,并不会对原有对象的成员值造成影响。若在构造函数内调用构造函数,除了是在初始化列表中,或是编译器自动合成的(父类的或类成员的)构造函数,也不会改变该对象的成员变量的值。
那么这样做的真实效果是什么呢?其实是该构造函数产生了一个无名对象。 不要忘了,构造this指针也是构造函数的任务之一哦。
参考文章:
http://blog.vckbase.com/iwaswzq/archive/2005/06/12/6432.html
http://www.vckbase.com/document/viewdoc/?id=933