c++ 继承

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内成员。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值