本文学习自 狄泰软件学院 唐佐林老师的 C++课程
提炼1:探索类对象中的成员变量被创建的初始值
- 在栈上创建对象时(局部变量),成员变量初始化为随机值
- 在堆上创建对象时(new),成员变量初始值为随机值
- 在 静态存储区 或 全局数据区 创建对象时(全局对象或静态对象),成员变量初始值为0
提炼2:如何在对象创建的时候对 对象进行初始化,引入了构造函数,构造函数的目的就是初始化对象,
注意构造函数初始化的是对象,不是成员变量,成员变量只能用初始化列表进行初始化!!!
实验1:对象中成员变量的初始值是多少?
实验2:构造函数的引入
实验1:对象中成员变量的初始值是多少?
#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());
printf("gt.j = %d\n", gt.getJ());
Test t1;
printf("t1.i = %d\n", t1.getI());
printf("t1.j = %d\n", t1.getJ());
Test* pt = new Test;
printf("pt->i = %d\n", pt->getI());
printf("pt->j = %d\n", pt->getJ());
delete pt;
return 0;
}
思考1:类 是一种特殊的自定义类型,这种的特殊的自定义类型可以用来定义变量,从面向对象的角度说,就是定义对象,但是本质上从程序的角度说,就是通过一个自定义类型来定义一个变量。既然是变量,他就需要占用存储空间,而且是和C语言中变量占用存储空间是一致的。类=数据类型 对象=变量
结论1:从程序设计的角度,对象只是变量,因此:
1.1 在栈上创建对象时(局部变量),成员变量初始化为随机值
1.2 在堆上创建对象时(new),成员变量初始值为随机值
1.3 在 静态存储区 或 全局数据区 创建对象时(全局对象或静态对象),成员变量初始值为0
实验2:构造函数的引入
#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());
printf("gt.j = %d\n", gt.getJ());
Test t1;
printf("t1.i = %d\n", t1.getI());
printf("t1.j = %d\n", t1.getJ());
Test* pt = new Test;
printf("pt->i = %d\n", pt->getI());
printf("pt->j = %d\n", pt->getJ());
delete pt;
return 0;
}
mhr@ubuntu:~/work/c++$ g++ 17-3.cpp
mhr@ubuntu:~/work/c++$ ./a.out
Test() Begin
Test() End
gt.i = 1
gt.j = 2
Test() Begin
Test() End
t1.i = 1
t1.j = 2
Test() Begin
Test() End
pt->i = 1
pt->j = 2
mhr@ubuntu:~/work/c++$