派生类可以定义一个和基类成员同名的成员,这叫做覆盖。在派生类中访问这样的的类成员时,缺省的情况是访问派生类中定义的成员。要在派生类中访问由基类定义的同名成员时,要使用作用域符::。
- class base
- {
- int j;
- public:
- int i;
- void func();
- };
- class derived:public base
- {
- public:
- int i;
- void access();
- void func();
- };
- void derived::access ()
- {
- j=5;//error
- i=5;//引用的时派生类的i;
- base::i=5;//引用的时基类的i
- func();//派生类的
- base::func();//基类的
- }
- int main()
- {
- derived obj
- obj.i=1;
- obj.base::i=1;
- }
一般情况下,派生类定义和基类同名的变量是愚蠢的,但是定义同名的函数却可以存在。
如果定义了同名的变量,那么基类的变量会在派生类的变量的前边。
(1)基类的private成员:可以被以下函数访问
–基类的成员函数
–基类的友元函数
(2)基类的public成员:可以被以下函数访问
–基类的成员函数
–基类道德友元函数
–派生类的成员函数
–派生类的友元函数
–其他函数
(3)基类的protected成员:可以被以下函数访问
–基类的成员函数
–基类的与友元函数
–派生类的成员函数可以访问当前对象的基类的保护成员
举例子:
- class father
- {
- private:int nprivate:
- public:int npublic;
- protected:int nprotected;
- };
- class son:public father
- {
- void accessfather(){
- npublic=1; //ok
- nprivate=1;//wrong
- nprotected=1;//ok,访问从基类继承的protedted成员
- son f;
- f.nprotedted=1;//wrong,f不是当前对象
- }
- };
- int main()
- {
- father f;
- son s;
- f.npublic=1;//ok
- s.npublic=1;//ok
- f.nprotedted=1;//error
- f.nprivate=1;//error
- s.nprotected=1;//error
- s.nprivate=1;//error
- return 0;
- }
今天的内容就讲到这里了!