对象的构造顺序一
对于局部对象
当程序执行流到达对象的定义语句时进行构造
例:
#include"stdio.h"
class Test
{
private:
int mi;
public:
Test(int i)
{
mi = i;
printf("Test(int i):%d\n",mi);
}
Test(const Test& obj)
{
mi = obj.mi;
printf("Test (const Test& obj):%d\n",mi);
}
int getmi()
{
return 0;
}
};
int main()
{
int i = 0;
Test a1(i);
while(i<3)
{
Test a2 = ++i;
}
goto end;
Test a(100);
end:
printf("a.mi = %d\n",a.mi);
return 0;
}
输出:
delphi@delphi-vm:~$ g++ test.cpp
test.cpp: In function ‘int main()’:
test.cpp:32: error: jump to label ‘end’
test.cpp:30: error: from here
test.cpp:31: error: crosses initialization of ‘Test a’
test.cpp:5: error: ‘int Test::mi’ is private
test.cpp:33: error: within this context
对象的构造顺序二
对于堆对象
当程序执行流到达new语句时,创建对象
使用new创建对象将自动触发构造函数的调用
#include"stdio.h"
class Test
{
private:
int mi;
public:
Test(int i)
{
mi = i;
printf("Test(int i):%d\n",mi);
}
Test(const Test& obj)
{
mi = obj.mi;
printf("Test (const Test& obj):%d\n",mi);
}
int getmi()
{
return 0;
}
};
int main()
{
int i = 0;
Test *a1 = new Test(i);
while(++i<10)
{
if(i%2)
{
new Test(i);
}
}
if(i<4)
{
new Test(*a1);
}
else
{
Test(100);
}
return 0;
}
输出:
Test(int i):0
Test(int i):1
Test(int i):3
Test(int i):5
Test(int i):7
Test(int i):9
Test(int i):100
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。