先说一下内存分区
内存分为栈区、堆区、全局区、常量区、代码区
栈区:int x=0;int *p=NULL;//平常定义变量存储的区,内存由系统来进行分配回收
堆区:int *p=new int[20];//使用new申请内存的未来用delete进行释放
全局区:存储全局变量及静态变量
常量区:string str ="hello";
代码区:存储编译之后逻辑代码的二进制
若我们定义一个类,在实例化之前没有占用内存,实例化之后对象存在栈区,所有的实例化的对象使用一个逻辑代码。
如果实例化对象,所有的数据是不可控的,所以我们要对对象进行初始化!
为了避免忘记或者重复调用初始化函数,C++提供了一种新的解决方案——构造函数!
1.构造函数能在对象实例化时被自动调用且只调用一次。
2.构造函数与类同名,没有返回值。
3.可以有多个重载形式。
4.实例化对象时仅用到一个构造函数。
5.构造函数分为有参无参
下面给出一个构造函数
构造函数还有另一种写法,也就是初始化列表
student():m_strName("jim"),m_iAge(10){}
多个变量的时候中间用逗号隔开,写在括号里
1.初始化列表在构造函数之前被执行
2.初始化列表只能用于构造函数
3.初始化列表可以同时初始化多个数据成员
在声明的时候写
teacher(string name=“jim”,int age=20)//已加默认值,定义时不用写了
在cpp文件里写
teacher:teacher(string name,int age):m_strName(name),m_iAge(age)//声明已经写了默认值,name就是jim,age就是20
{
}