1.对象中成员变量的初始值
-> 在栈上创建对象时,成员变量初始为随机值。
-> 在堆上创建变量时,成员变量初始为随机值。
-> 在静态存储区创建变量时,成员变量初始为0值。
#include <stdio.h>
class Test
{
private:
int i;
int j;
public:
int getI() { return i; }
int getJ() { return j; }
};
Test gt; //在全局数据区
int main()
{
printf("gt.i = %d\n", gt.getI()); //0
printf("gt.j = %d\n", gt.getJ()); //0
Test t1; //存储空间在栈上面,显示的初始值就不定了
printf("t1.i = %d\n", t1.getI()); //134513995
printf("t1.j = %d\n", t1.getJ()); //5984244
Test* pt = new Test;//在堆空间中生成一个test对象
printf("pt->i = %d\n", pt->getI()); //0
printf("pt->j = %d\n", pt->getJ()); //0
delete pt;
return 0;
}
2.对象的初始化
问题:程序中如何对一个对象进行初始化?
-> 一般而言,对象都需要一个确定的初识状态。
-> 在类中提供一个public的initialize函数;
-> 对象创建后立即调用intialize函数进行初始化。
-> 如果未调用initialize函数,运行结果是不确定的。
#include <stdio.h>
class Test
{
private:
int i;
int j;
public:
int getI() { return i; }
int getJ() { return j; }
void initialize()
{
i = 1;
j = 2;
}
};
Test gt;
int main()
{
gt.initialize();
printf("gt.i = %d\n", gt.getI()); //1
printf("gt.j = %d\n", gt.getJ()); //2
Test t1;
t1.initialize();
printf("t1.i = %d\n", t1.getI()); //1
printf("t1.j = %d\n", t1.getJ()); //2
t1.initialize();
Test* pt = new Test;
pt->initialize();
printf("pt->i = %d\n", pt->getI()); //1
printf("pt->j = %d\n", pt->getJ()); //2
delete pt;
return 0;
}
3.构造函数
-> C++ 中可以定义与类名相同的特殊成员函数:这种特殊的成员函数叫做构造函数。
-> 构造没有任何返回类型的声明。
-> 构造函数在对象定义时自动被调用。
-> 类的构造函数用于对象的初始化。
#include <stdio.h>
class Test
{
private:
int i;
int j;
public:
int getI() { return i; }
int getJ() { return j; }
Test()
{
printf("Test() Begin\n");
i = 1;
j = 2;
printf("Test() End\n");
}
};
Test gt; //定义对象时,构造函数自动被执行
int main()
{
printf("gt.i = %d\n", gt.getI()); //1
printf("gt.j = %d\n", gt.getJ()); //2
Test t1;//定义对象时,构造函数自动被执行
printf("t1.i = %d\n", t1.getI()); //1
printf("t1.j = %d\n", t1.getJ()); //2
Test* pt = new Test; //定义对象时,构造函数自动被执行
printf("pt->i = %d\n", pt->getI()); //1
printf("pt->j = %d\n", pt->getJ()); //2
delete pt;
return 0;
}
|