类成员的访问权限

声明:

分为下面两种情况:

1、在类的内部进行访问
2、在类对象的内部访问,即主函数中用对象调用函数和数据成员,且对象永远不能访问类的私有成员和保护函数。

继承:

派生类对基类的全部成员函数和数据成员进行全部接受,除过构造函数和析构函数,在派生类中,把基类的函数和数据成员复制了一份。

public继承

在基类当中,只能通过公有方法对私有数据进行操作。派生类公有继承基类时:在派生类内部,可以访问公有方法和保护方法,不能直接访问基类的私有数据,但可以调用公有方法进行访问;在派生类的外部,不能访问私有数据和保护函数,只能调用公有方法。

#include<iostream>
using namespace std;
//1、在类的内部
//2、在类外部,即主函数中
class Base
{
public:
    void Show_Base()
    { cout<<"Show() Base"<<endl;}
    //公有方法
    void setX(int data)
    { x=data; }
protected:
    void Print_Base()
    { cout<<"Print() Base"<<endl;}

private:
    int x;
};
//公有继承
class D:public Base
{
private:
    int y;
public:
    void show_D()
    {cout<<"show() D"<<endl;
    //可以访问保护方法
     Print_Base();
    }
        void setXX(data)
    {
         y=data;
         //x = data;
         setX(data);
    }

    void Print_D()
    { cout<<"Print() D"<<endl;}

};
void main()
{
    Base b;
    D d;
    //不能访问私有数据
    //d.x=10;
    //不能访问保护方法
    //d.Print_Base();
}

private继承

基类的所有方法和数据成员变成了子类的私有部分,对象不能调动私有部分,公有的可以访问私有的

私有成员在私有继承时,在类的内部可以对私有数据(公有方法可访问私有属性)和保护方法进行访问;在类的外部,子类不能对基类的所有方法访问。

#include<iostream>
using namespace std;
//1、在类的内部
//2、在类外部,即主函数中
class Base
{
public:
    void Show_Base()
    { cout<<"Show() Base"<<endl;}
    void setX(int data)
    { x=data; }
protected:
    void Print_Base()
    { cout<<"Print() Base"<<endl;}

private:
    int x;
};
//私有继承
class D:protected Base
{
private:
    int y;
public:
    void show_D()
    {cout<<"show() D"<<endl;
    Print_Base();
    }
    //保护的可以访问
    void Print_D()
    { cout<<"Print() D"<<endl;}

};
void main()
{
    Base b;
    D d;
    //d.x=10;
    //继承过来变成私有的 不能访问
    //d.Show_Base();
}

protected继承

私有成员在保护继承时,在类的内部可以对私有数据(公有方法可访问私有属性)和保护方法进行访问;在类的外部,子类不能对基类的所有方法访问。

#include<iostream>
using namespace std;
//1、在类的内部
//2、在类外部,即主函数中
class Base
{
public:
    void Show_Base()
    { cout<<"Show() Base"<<endl;}
    void setX(int data)
    { x=data; }
protected:
    void Print_Base()
    { cout<<"Print() Base"<<endl;}

private:
    int x;
};
class D:protected Base
{
private:
    int y;
public:
    void show_D()
    {
     cout<<"show() D"<<endl;
     //可以访问保护
     Print_Base();
    }
    void Print_D()
    { cout<<"Print() D"<<endl;}

};
void main()
{
    Base b;
    D d;
    //d.x=10;

     //d.show
    d.setXX();
    //保护方法不能被访问
    //d.Show_Base();
    //d.Print_Base();
}

总结:

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值