前言: 类的定义中,不能对数据成员初始化;所以需要给对象进行初始化;(以下为简要笔记)
目录
一.什么是对象?
对象就是类的实例化;
int a; a是整形变量;a是整型变量的实例化;
class student ;student a; a 是student 类型的实例化;
二.为什么要学习构造函数?
那为什么需要构造函数,不直接人工初始化呢?
1手工初始化 Test t1.c(3,4),Test t2.c(3,4);
重复过多,且比较麻烦;
2定义对象数组的时候,没有机会进行显示初始化:
class Test{} ; Tset arr【100】; Test arr[100]={Test (),Test(),Test()... }
三:构造函数
1构造函数语法:
函数名和类名相同; 当定义对象时,c++编译器会自动调用相应的构造函数;
2.构造函数分类:
1.默认构造函数:
a.默认无参数构造函数:当类没有定义构造函数时, 编译器提供一个无参数构造函数,并且函数体为空;
b.默认拷贝构造函数:当勒种没有定义拷贝构造函数时,编译器默认提供一种默认拷贝构造函数 ,进行成员变量的值赋值;
但是只要你写了构造函数,你必须要用构造函数初始化,c++不在提供默认函数进行初始化;
2.无参数构造函数
调用无参数构造函数 不用写 ()
Test t1(); Test t2;
3.有参数构造函数
Test t3(1);
Test t4=2;
Test t5 =Test (3);//程序员手工构造函数;
4.拷贝构造函数:
类名 (( const)类名 & 形参)
作用:用一个对象初始化另一个对象;
应用场景:
1Test t1=t2; Test t1(t2);
2void printTest(Test t5) ; printTest(t1);
3返回一个元素,匿名对象时:
Test getTest_x() {Test t ;return t;}
Test myt1 = getTest_x();//匿名对象初始化,另一个对象,匿名对象直接转正;
Test myt2(1);
myt2=getTest_x();//用匿名对象, 给另一个对象 赋值 匿名对象被析构;
3.构造函数的调用:
四.析构函数
析构函数:对象生命周期结束时,会被c++编译器自动调用;
五.构造函数和析构函数顺序:
先构造函数的 后被析构;