从C到C++(下)
继承
从一个类派生到另外一个类,使前者的所有特征在后者中自己主动可用。
他能够声明一些类型,这些类型能够共享部分或所有曾经所声明的类型。它也能够从超过一个的基类中共享一些特性。
C++是支持多继承的。
类的继承修饰符后:
使用private继承,父类的全部方法在子类中变为private;
使用protected继承,父类的protected和public方法在子类中变为protected,private方法不变;
使用public继承,父类中的方法属性不发生改变;
public: | protected: | private: | |
public继承 | public | protected | --- |
protected继承 | protected | protected | --- |
private继承 | private | private | --- |
class Fruit{ public: peel(); slice(); juice(); private: int weight; int height; }; class Apple : public Fruit { public: void make_candy_apple(float weight); void bob_fro(int tub_id, int num_of_attempts); }不要把一个类内部嵌套还有一个类与继承相混淆。
类的嵌套并不具有特殊的权限。跟被嵌套的类也没有什么特殊的关系。
嵌套通常被用于实现容器类(实现一些数据结构的类,如链表、队列等)。
C++添加了模板(template)被用于实现容器类。
继承表示一个对象是一个更为普通的父对象的特型。
—————————————————————————————————————————————————————————————————————————————
多重继承
多重继承同意把两个类组合成一个。这样结果类对象的行为类似于这两个类的对象中的不论什么一个。
它把树形类体系变成格形。
—————————————————————————————————————————————————————————————————————————————
多态——执行时绑定
多态,支持相关的对象具有不同的成员函数(但原型同样),同意对象与适当的成员函数进行执行时绑定。C++通过覆盖支持这样的机制——全部的多态成员函数具有同样的名字,由执行时系统推断哪一个最为合适。
当使用继承时就要用到这样的机制:有时你无法在编译时分辨所拥有的对象究竟是基类对象还是派生类对象。这个推断并调用正确的函数的过程就被称为“后期绑定”。在成员函数加virtualkeyword告诉编译器该成员函数是多态的。
在平常的编译时重载中,函数的原型必须显著不同。这样编译器才干通过查看擦输的类型来推断须要调用那个函数;但在虚拟函数中。函数的原型必须同样,有执行时系统进行解析调用哪一个函数。这样的过程叫覆盖。
重载是发生在同一类的不同函数间。覆盖是发生在多个类继承中。
多态就是指一个函数函数或操作符仅仅有一个名字,但它能够用于几个不同的派生类型的能力。
每一个对象都实现该操作的一种变型,表现一种最适合自身的行为。它始于覆盖一个名字,对同一名字进行复用,使它能够表现出不同的行为。
—————————————————————————————————————————————————————————————————————————————
C++纯虚函数
一、定义
纯虚函数是在基类中声明的虚函数。它在基类中未定义,但要求不论什么派生类都要定义自己的实现方法。在基类中实现纯虚函数的方法是在函数原型后加“=0”
virtual void funtion()=0
二、引入原因
1、为了方便使用多态特性。我们经常须要在基类中定义虚拟函数。
2、在非常多情况下,基类本身生成对象是不合情理的。比如,动物作为一个基类能够派生出老虎、孔雀等子类。但动物本身生成对象明显不合常理。
为了解决上述问题,引入了纯虚函数的概念,将函数定义为纯虚函数(方法:virtual ReturnType Function()= 0;)。则编译器要求在派生类中必须予以重写以实现多态性。
同一时候含有纯虚拟函数的类称为抽象类。它不能生成对象。这样就非常好地攻克了上述两个问题