类的多态
访问控制
类的成员包括三种:public,protected,private。对于一个基类来说,public成员类内可以访问,类的对象也可以直接访问;protected成员类内可以访问,类的对象不可以访问,但是其派生类(子类)内可以访问;而private成员只能在自己类内访问。也就是子类公有继承可以获得父类非private成员的全部属性,私有继承基类的公有成员和保护成员都作为派生类的私有成员
虚函数
虚函数的作用主要是为了实现多态机制。如果一个基类指针指向一个派生类对象,该指针只能访问基类成员(静态联编)。而虚函数可以实现基类的指针调用派生类成员函数。
虚函数是通过一张虚函数表实现的。c++编译器保证虚函数表的指针存在于对象实例最前面的位置
虚函数可以在基类中实现,子类重写父类中有相同名称和参数的虚函数;纯虚函数不能在基类中实现,只能在派生类中实现
子类重新定义父类有相同名称的非虚函数(参数列表可以不同)
派生类对象构造、析构函数调用顺序基类构造-派生类构造-派生类析构-基类析构
如果基类析构不为虚,当delete指向派生对象的基类指针时则只会调用基类的析构函数,不会调用派生类的析构函数,造成内存泄漏
代码
运行结果1
而将基类析构声明为虚析构时,派生类的内存就会被释放了
运行结果2