在讲到虚函数之前,先附一张表(如果急切,直接翻到说虚函数的部分即可)
基类的私有成员变量,派生类虽能继承,但不能访问,是不可见的。
基类的保护成员和派生类的唯一不同就是作用域。
除了析构和所有的构造不可继承外,其他都可继承
基类和派生类成员方法的关系:
重载:(同一作用域),方法名相同,返回值类型,参数列表不同。
隐藏:(使用前提:派生类对象调用继承于基类的方法)同名的方法就隐藏了。(函数名,不管参数)
覆盖:(virtual)(使用前提:动多态,基类指针,指向不同的派生类对象,且要调用虚函数):即虚函数表中覆 盖,返回值,参数列表,函数名都相同,基类的方法是虚函数,派生类的自动成为虚函数,两方法是覆盖关 系。
基类对象 =》 派生类对象 不行
派生类对象 =》基类对象 (由下都上) ok
基类指针或引用=》派生类对象 ok,只能访问派生类继承来的成员
派生类指针或引用 =》基类对象 不行
虚函数基础讲解
虚函数的作用:允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来访问基类和派生类中的 同名函数
虚函数的使用:
1:基类的方法前面加上virutual,派生类的同返回值,同方法名,同参数的方法也自动成为虚函数。根据派生类的 需求,重写此函数。
2:定义一个指向基类对象的指针变量,并使它指向同一类族中需要调用该函数的对象。
3:通过该指针变量调用此虚函数,此时调用的就是指针变量指向的对象的同名函数。(原因与动态绑定有关,下面 会详细说)
纯虚函数:在基类中声明的虚函数,它在基类中没有定义(无函数体),但要求任何派生类都要定义自己的实现方法。 在基类中实现纯虚函数的方法是在函数原型后加“=0”(eg:virtual void funtion()=0 ),拥有纯虚函数 的类是抽象类。抽象类不能实例化对象.
静多态(编译时多态):重载,