C++问题记录之封装篇:
1.为什么类中要有构造和析构函数?
2.构造函数的规则和特点:
1.构造函数在对象实例化时被自动调用
2.构造函数与类同名
3.构造函数没有返回值
4.构造函数可以有多个重载形式
5.实例化对象时仅用到一个构造函数
6.当用户没有定义构造函数时,编译器自动生成一个构造函数
默认构造函数:
把实例化时不需要传递参数(无参数或全部参数都有默认值)的构造函数称为默认构造函数。如果一个构造函数为所有的参数都提供了默认实参,则它实际上也定义了默认构造函数
3.初始化列表特性
1.初始化列表先于构造函数执行
2.初始化列表只能用于构造函数
3.初始化列表可以同时初始化多个数据成员
4.拷贝构造函数
1.如果没有自定义的拷贝构造函数则系统自动生成一个默认的拷贝构造函数
2.当采用直接初始化或复制初始化实例化对象时,系统自动调用拷贝构造函数
拷贝构造函数和析构函数都不能重载
5.对象成员:
实例化对象A,如果A中包含对象成员B:B构造->A构造->A析构->B析构;
如果B有默认构造函数则A不需要初始化列表来初始化B;
如果B的构造函数有入参,则A需要初始化列表来初始化B;
联想:造一辆汽车,首先需要打造汽车的零部件,然后再将汽车封装,摧毁一辆汽车时,需要先打开汽车,再摧毁各个部件。
6.头文件的重复引用:
当.hpp文件和.cpp文件分开写时(在hpp中声明,在cpp中实现),在主函数中头文件不能重复调用,不然会导致重复定义的错误。
new一块内存,会去调用对象的构造函数;
malloc一块内存,不会去调用对象的构造函数;
7.指针对象访问的两种方式:
p->m_iX或者(*p).m_iX
8.对象成员:对于一个对象来说,它成为了一个类的数据成员。
对象成员指针:对象的指针成为了一个类的数据成员。
9.this指针:指向数据成员自身的指针。
解决了--成员函数知道该调用哪个对象的数据成员。
This指针的本质:相当于所在对象的地址。
Const修饰的常成员函数不能修改数据成员的值。
Const修饰的常对象,调用的是定义的常成员函数。
常对象定义的语法:const 类名 对象名(参数列表)|| 类名 const 对象名(参数列表)//声明时必须初始化
常成员函数定义的语法:类型标识符 类名::函数名(参数列表) const
常成员函数声明的语法:类型标识符 成员函数名(参数列表) const
互为重载:常对象只能调用常成员函数
常成员函数中可以使用普通的数据成员,但是不能改变对象成员的值
常函数成员就是为常对象服务的,常对象只能访问常函数成员。但是普通对象也可以访问常成员函数,在访问过程中,普通对象会被视为常对象,在运行过程中,普通对象的数据成员也不会被改变。const 还能用来声明函数重载,当普通对象调用同名函数时,会选择最近的函数调用。
10.对象成员指针:
这里我们需要注意对象成员与对象成员指针在创建与销毁时的不同
对象成员的创建和销毁是相反的,而对象成员指针的创建和销毁顺序是相同的。