成员函数的重定义和名字隐藏
基类的数据成员和成员函数在派生类中都有一份拷贝,派生类能够直接访问从基类继承而来的public和protected成员,且只能够通过这两类成员访问从基类继承而来的private成员。
派生类不仅可以添加基类没有的新成员,而且可以对基类的成员函数进行重定义或重载。重定义是指派生类可以定义与基类具有相同函数原型的成员函数(相同的返回类型、函数名、参数表),而重载则要求成员函数具有不同的函数原型。
需要指出的是,派生类对基类成员函数的重定义或重载会影响基类成员函数在派生类中的可见性,基类的同名成员函数会被派生类重载的同名函数所隐藏。
一般认为派生类与基类同名成员函数之间是一种重定义而非重载关系:
1、重载不会隐藏同名的其他成员函数;
2、重载是指相同作用域中的同名函数,而派生类与基类个自定义了一个唯一的作用域,二者是独立的。
基类成员访问
一个派生类对象时实际上由两部分构成:基类子对象和派生子对象。
派生类对基类成员的访问有以下几种方式:
1、通过派生类对象直接访问基类成员。public继承中,基类的public在派生类中也是public,可以被派生类对象的外部函数直接访问。
2、在派生类成员函数中直接访问基类成员,三中继承方式中基类的public和protected成员都可以被派生类的成员函数直接访问。
3、通过基类名字限定访问被重载的基类成员名。在派生类中被重载或重定义的基类成员,只有通过基类的类名限定才能访问。