c++ 继承

来源:互联网 发布:java调用ant打包 编辑:程序博客网 时间:2024/06/17 13:35

public继承:

                  父类public成员被子类public继承后,父类成员将属于子类的public成员;

                  通过子类的对象可以访问父类的public成员 或成员函数;

                  父类protected成员被子类public继承后,父类成员将属于子类的protected成员;

                  通过子类的对象只能访问子类的成员函数,无法访问父类的protected成员 或成员函数;
                  父类private成员不能被子类public继承。

 protected继承:

                    父类public成员被子类protected继承后,父类成员属于子类的protected成员;

                    通过子类的对象只能访问子类的成员函数,无法访问父类的public成员 或成员函数;

                    父类protected成员被子类protected继承后,父类成员属于子类的protected成员;

                    通过子类的对象只能访问子类的成员函数,无法访问父类的protected成员 或成员函数;  

                   父类private成员不能被子类 protected继承。            

 private继承:  

                   父类public成员被子类 private继承后,父类成员将属于子类的 private成员;

                    通过子类的对象只能访问子类的成员函数,无法访问父类的public成员 或成员函数;  

                    父类protected成员被子类 private继承后,父类成员将属于子类的 private成员; 

                    通过子类的对象只能访问子类的成员函数,无法访问父类的protected成员 或成员函数;

                    父类private成员不能被子类 private继承。     


#include<iostream>using namespace std;//////////////////////////////////////////////////////////////////////////class A       //父类{private:    int privatedateA;protected:    int protecteddateA;public:    int publicdateA;};//////////////////////////////////////////////////////////////////////////class B :public A      //基类A的派生类B(共有继承){public:    void funct()    {        int b;        b=privatedateA;   //error:基类中私有成员在派生类中是不可见的        b=protecteddateA; //ok:基类的保护成员在派生类中为保护成员        b=publicdateA;    //ok:基类的公共成员在派生类中为公共成员    }};//////////////////////////////////////////////////////////////////////////class C :private A  //基类A的派生类C(私有继承){public:    void funct()    {        int c;        c=privatedateA;    //error:基类中私有成员在派生类中是不可见的        c=protecteddateA;  //ok:基类的保护成员在派生类中为私有成员        c=publicdateA;     //ok:基类的公共成员在派生类中为私有成员    }};//////////////////////////////////////////////////////////////////////////class D :protected A   //基类A的派生类D(保护继承){public:    void funct()    {        int d;        d=privatedateA;   //error:基类中私有成员在派生类中是不可见的        d=protecteddateA; //ok:基类的保护成员在派生类中为保护成员        d=publicdateA;    //ok:基类的公共成员在派生类中为保护成员    }};//////////////////////////////////////////////////////////////////////////int main(){    int a;      B objB;    a=objB.privatedateA;   //error:基类中私有成员在派生类中是不可见的,对对象不可见    a=objB.protecteddateA; //error:基类的保护成员在派生类中为保护成员,对对象不可见    a=objB.publicdateA;    //ok:基类的公共成员在派生类中为公共成员,对对象可见     C objC;    a=objC.privatedateA;   //error:基类中私有成员在派生类中是不可见的,对对象不可见    a=objC.protecteddateA; //error:基类的保护成员在派生类中为私有成员,对对象不可见    a=objC.publicdateA;    //error:基类的公共成员在派生类中为私有成员,对对象不可见     D objD;    a=objD.privatedateA;   //error:基类中私有成员在派生类中是不可见的,对对象不可见    a=objD.protecteddateA; //error:基类的保护成员在派生类中为保护成员,对对象不可见    a=objD.publicdateA;    //error:基类的公共成员在派生类中为保护成员,对对象不可见     return 0;}




*** 值得注意的是:外部调用(如主函数中直接调用)只能调用public里的成员及函数。内部成员函数(在同一个类里面)却可以调用包括其本身的public、protected、private内成员。

原创粉丝点击