虚构类(用virtual的修饰的类)为虚构类
问题:通过基类指针,释放派生类的堆空间时,并不会调用派生类的析构函数,导致派生类中构造分配的资源未被释放。
解决方法:虚析构,将析构函数放入虚空间,方便对象释放时进行调用
纯虚函数和抽象类:
当类中存在纯虚函数时,该类为抽象类,纯虚函数的定义(virtual 修饰的函数且函数没有方法体)
例子:
virtual void getInfo()=0;纯虚函数
抽象类不能实例化,必须的其派生类去覆盖这些纯虚函数后才能被实例化
抽象类的作用:预留接口给派生类,方便实现动态多态
1.方便提高代码重用性
2.类型安全性
3.代码可读性或者可维护性
友元函数:慎重使用,不利于代码的安全性,破坏类的封装性。
在一个函数内部声明另一个被friend修饰的函数,那么被friend修饰的函数称为该函数的友元函数,友元函数具有权限访问该函数的所有数据成员和成员函数。
四个问题:
友元函数是该类的成员函数吗?
不是,友元函数是声明该函数具有权限访问该类中的所有数据成员和成员函数
友元函数可以被其派生类继承吗?
不行,该声明无法被派生类继承
一个类可以有多个友元类吗?
可以
一个友元类可以在多个类中声明吗?
可以
由于声明顺序的问题,当两个类互为友元类时,需要将类声明提前,且类中的函数需要在两个类声明完毕后在类外定义,同理类中函数作为友元访问另一个类的所有成员也需要将该函数在两个类声明完毕后在外部进行定义。