1、构造函数写法优化
设计一个类3步: 1、数据一定要放到private里 2、数据传递和返回值尽量使用引用,并审查是否需要加const 3、在类中的函数需要加const的需要
变量数值设定有两阶段: 1、初始化(初始列) 2、赋值(在大括号里面赋值)
在这里插入图片描述
2、new、delete的执行过程
在这里插入图片描述
在这里插入图片描述
3、内存分配和回收
红色部分用来记录,开辟内存数,因为开辟内存必须要是16的倍数,所以最后3位都是0,所以利用最后一位来做记录1是给出,0是销毁
在这里插入图片描述
创建数组和效果数组
在这里插入图片描述
array new一定要搭配array delete使用,如果不搭配,会造成析构函数只会被调用一次,导致类中内存泄漏
在这里插入图片描述
4、static使用
可以给类中函数和成员变量前面添加static关键字,让他们变成静态的,他不属于对象,而是属于类本身,静态函数只能处理静态的数据,不能处理其他数据
在这里插入图片描述
在这里插入图片描述
模版操作
在这里插入图片描述
当一个构造函数被声明为explicit时,它禁止了隐式转换的发生。这意味着在使用该构造函数进行对象的初始化时,必须显式地调用构造函数。
class MyClass{
public:
explicit MyClass(int value) {...}
};
MyClass obj1 =42;// 错误,不能使用隐式转换
MyClass obj2(42);// 正确,使用显式构造
MyClass obj3 =MyClass(42); // 正确,显式构造并复制给 obj3
5、组合与继承
类中包含另外一个类的对象:
构造和析构的顺序,编译器调用的是默认的构造函数,如果满足不了,则需要自己在初始化列表中写需要调用的构造函数
在这里插入图片描述
类中包含另外一个类的对象指针: 这种写法也是非常流行,左边是对外提供的接口,右边是类的具体实现功能,左边类通过类指针去访问具体功能。
在这里插入图片描述
继承:
在这里插入图片描述
6、虚函数
在父类中写出程序大致框架,不能实现的部分设置为虚函数,子类去重写这个虚函数
在这里插入图片描述
class Test
{
public:
virtual void seri() =0;
void opentest()
{
cout<<"进入opentest"<<endl;
seri();
}
};
classTest_b:publicTest
{
virtual void seri()
{
cout<<"进入seri"<<endl;
}
};
Test_b b;
b.opentest();
Prototype 模式也正是提供了自我复制的功能,就是说新对象的创建可以通过已有对象进行创建
7、const
当成员函数的const和non-const版本同时存在,const object只会调用const版本,反之,non-const只会调用non-const版本
在这里插入图片描述
8、虚指针和虚表
在这里插入图片描述