选择:
知识点:赋值兼容规则指的是什么:3条
知识点:A的确是继承了B的成员(成员函数,成员变量),但是A访问这些成员仍然要遵守这些成员在B类的访问规则,例如:A继承了i,但是i仍然是private的,因此不能在类外类中访问。
知识点:
1.什么是纯虚函数,形如:
类中有纯虚函数的类称为抽象类,抽象类是不能被实例化的。
继承了纯虚函数的类也不能实例化,除非他重写了纯虚函数,纯虚函数的作用就是迫使派生类必须重写虚函数
2.什么是虚基类,发生在菱形继承中,如下的A被称为虚基类
抽象类中的纯虚函数可以有内容,但仍然不能实例化
知识点:在多态中析构函数为什么要写成虚函数,以及析构函数实现多态后是如何运作的
场景:
父类指针指向了一个new出来的子类
那么调用delete p1 ,我们期望结果是:分别调用子类和父类的析构函数。
BUT
只调用了父类析构,why?因为我p1是person*类型,指向的是student中的person,所以它会调用student中person的析构函数
但是student已经new出来了一个对象了啊,且student里也已new了资源,不调student的析构函数就会造成内存泄漏。
所以要把析构函数写成虚函数的形式,实现目的。如何实现的?我们已经重写了析构函数,并把它设置为虚函数,此时p1指向的是student中的person,person里有一张虚表,虚表里存放了重写后的析构函数的地址,p1会调用这个析构函数。调用完studentd析构函数后,再去调用person的析构函数,再调用free释放指针指向的堆空间,达到目的
知识点:
C语言的结构体没有成员函数
知识点:
什么是单例模式 一个类只能创建一个对象
知识点:
1.析构函数中不能调用delete,因为delete会调用析构函数,会引发无限循环
2.this指针的类型是 *const 即不能被修改
A(A&)=delete这是什么?
类中禁止生成A(A&)这个拷贝构造函数,既然显示的写了,也无法被调用,因为它是被删除的函数
day14