函数的重写:
当子类定义了与父类一模一样的函数时,子类定义的函数将会覆盖父类继承过
来的函数,称之为重写。
如果子类重写了父类继承过来的函数,但是又想调用已经被覆盖的父类函数,
那么可以使用 parent(父类名)::(被覆盖的父类函数)
如: parent::test(); 实现调用父类的函数
父类指针指向子类对象:
从语法本质讲,子类对象的前半部分就是父类(从父类继承的数据),因而可
以将子类对象的指针直接转化为父类。
注意:当父类指针指向子类对象时,而且子类对象函数又重写了继承过来的父
类函数,那么父类指针调用重写函数时,调用的是哪个类的函数? 父类
所以,当一个成员函数需要子类重写,那么在父类应该将其声明为virtual,
称之为虚函数,那么就能执行子类的函数,而不是父类的。
virtual的作用:根据对象的实际类型,调用相应类型的函数,也就是说即使
父类指针指向子类对象,也会根据子类对象指向子类函数,而不是跳转到父类
执行函数。
![](https://i-blog.csdnimg.cn/blog_migrate/edc87708eddf39520dad5fd19de00f83.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c5a86dde3fe7169acdb5e5eb66b0baa8.png)
注:virtual在函数中占4个字节,无论定义多少个virtual声明,加起来依旧只占4个字节。
纯虚函数:
1.将成员函数声明为virtual
2.函数声明后加上 =0
3.该函数没有函数体
例如:virtual void test(char *test) = 0;
只要有纯虚函数,那么这个类就是抽象类(或称纯虚类),抽象类不能够被实
例化,即无法创建该对象。实际用途:充当“接口规范”,相当于Java中
interface语法,用于替代C中的回调函数语法
接口规范:凡是遵循此规范的类,都必须实现指定的函数接口。通常指一系列接口