目录
前言
在上一次我们讲解的派生类和析构函数间的构造规则,下面我们将会讲述的是基类成员在派生类中的访问属性的其他方式以及同名函数的概念等等
同名成员的相关知识
在C++中,他是允许在派生类中声明成员是与基类中成员的名字相同,换句话来说,派生类可以重新声明与基类成员中相同名字的成员,但是如果在没有虚函数的情况下,在派生类中定义了乙基类成员同名的成员,那么此时的派生类成员就会覆盖激烈中的同一成员,在派生类中,如果这个名字的使用就意味着访问在派生类中重新声明的成员
下面来展示一个程序片段就可以说明上面的要点了
class A { public: int f(); }; class B :public A { public: int f(); int g(); }; int B::g() { f(); B::f(); //表示访问派生类中的f(),即调用的函数是B::f(); return 0; }
在私有继承的情况之下,为了保证基类中的一部分成员函数在派生类中也是存在的,所以必须要在派生类中重新再次定义同名的成员。在C++面向对象程序设计中,如果要在派生类中对基类所继承过来的东西的某些函数的功能进行,更进一步的扩充和改造都可以通过以上的方式覆盖来实现这种覆盖的方法,这就是对基类成员改造的至关重要的手段,是程序设计中程序员们经常使用的方法之一。
访问声明
在之前的程序之中,我们已经说过对于公有继承,在基类中的公有成员函数,也就是派生类中的公有成员,函数继承说明外界可以用派生类中的对象来调用基类中原有的公有成员函数,但是对于私有继承在基类中的公用函数就会变成派生类中的私有成员函数,在这个时候,外界就会无法利用派生类中的对象直接对基类中的成员函数来进行调用和访问,而只能通过调用派生类中的成员函数,实现间接的调用基类中的成员函数
数据成员可使用访问声明
class A { public: int a1; … private: … }; class B :private A { public: … A::a1; … private: … };
访问声明只含没有类型和参数的函数名和变量名
如果将上面的访问声明写成如下:
void A::show; 或 A::show(); 或 void A::show(); 都是不对的
小结
1、访问声明是不能够改变成员在所属基类中的访问属性,换句话来说,访问声明只能够将原基类中的保护成员变为私有派生类中的保护成员,但是把原基类中的公有成员变为私有派生类中的公有成员,但是对基类中的私有成员仍不能使用访问声明
2、关于基类中的重载函数名,在访问声明时,将对基类中一切的同名函数都有着作用,这将意味着重载函数在使用访问声明的过程中,一定要非常的谨慎