关于重载,覆盖/隐藏,虚函数,纯虚函数,多重继承

来源:互联网 发布:新网域名备案 编辑:程序博客网 时间:2024/06/08 17:46

 这些概念放在类里面进行解释

函数重载:指的是一个函数在一个类里面有多种实现方法,只是这些方法使用的参数个数或者参数类型不同,当调用这个函数时,程序会根据传进来的参数个数和类型自动去调用匹配的那个。

函数覆盖:指的是子类中重新定义了一个父类中拥有的函数,重新定义的这个函数只要与父类的函数名一样(参数一样与否不影响)就构成对父类这个函数的覆盖/隐藏。同时,如果父类中如果重载了这个函数,这时候,与子类参数类型也完全一致的函数被覆盖,剩下的这几个重载函数就会被隐藏。当用子类的对象去调用这个函数时,就会调用子类的函数。如果想去调用父类被隐藏的函数,需要加上路径,就是在函数名前加上父类名和::,这样就可以了。同样如果想去访问被覆盖的函数加上路径名就可以了。

虚函数:就是在一个函数声明前加上virtual ,这样当该函数有子类时,如果在该子类中也实现了该虚函数,当用子类的对象调用这个函数时,可以理解为函数覆盖,其执行子类的函数。当把子类的指针赋值给父类指针对象时,当用这个父类指针调用虚函数时,他首先会看子类中是否有与这个函数类型完全一样的类型(包括函数名,参数类型和个数)

如果有就调用子类的,如果没有依然调用父类的

 纯虚函数:纯虚函数和虚函数的区别是纯虚函数只进行声明,不在父类中实现,其声明的形式是在虚函数声明形式的基础上加上=0,拥有纯虚函数的类称为纯虚类,这样的类不能声明对象,但可以声明指针类型的变量。而其子类必须实现纯虚类的所有纯虚函数。

多重继承:多重继承继承方式和单一继承差不多,只要把所继承的所有父类用逗号隔开即可。

但多重继承会产生很多问题,例如当所继承的多个父类中有相同的函数声明,当子类调用该函数时,系统就不知道该调用哪个函数,从而产生错误,一种解决的办法是对所用的函数加上路径名(类名::)。

还有一个问题是如果继承的这些父类他们自身又继承自相同的父类,当子类去调用父类的父类的方法时就会产生错误,原因是子类中有继承多个父类就拥有多个这个父类的方法,当去调用时就会产生歧义,一种解决办法是如上面加上路径名,另外一种解决办法是采用虚继承,就是这些父类虚继承这个公有的父类,这样子类中就只有一个公有父类的方法,再去调用时就不会出现歧义了。

上面是我理解的,不一定对,仅供参考!!!!!

原创粉丝点击