C++类中成员访问权限控制

首先解释几个特定词,下面要用到:

  • 水平权限:在一个类中,成员的权限控制,就是类中的成员函数能否访问其他成员、类的对象能否访问类中某成员。
  • 垂直权限:在派生类中,对从基类继承来的成员的访问。
  • 内部访问:类中成员函数对其他成员的访问。
  • 外部访问:通过类的对象,访问类的成员函数或者成员变量,有的书里也称之为对象访问。

C++的水平权限控制

当private,public,protected单纯的作为一个类中的成员(变量和函数)权限设置时:
类的成员函数以及友元函数可以访问类中所有成员,但是在类外通过类的对象,就只能访问该类的共有成员。
注:友元函数包括两种:设为友元的全局函数,设为友元类中的成员函数;这里将友元函数看成内部函数,方便记忆!

总结为下表:

这里写图片描述

程序验证如下:这里没有friend的成员,另外成员变量和成员函数的权限控制是一样的。

#include <iostream> 

class Foo
{
public:
    int a;
    void public_fun();
protected:
    char b;
    void protected_fun();
private:
    bool c;
    void private_fun();
};

//验证public成员内部可见性
void Foo::public_fun()
{
    a = 10;
    b = 'c';
    c = true;
}

//验证protected成员函数的内部可见性
void Foo::protected_fun()
{
    a = 10;
    b = 'c';
    c = true;
}

//验证private成员函数的内部可见性
void Foo::private_fun()
{
    a = 10;
    b = 'c';
    c = true;
}

int main()  
{  
    Foo foo;
    foo.public_fun();//验证public成员外部可见性
    foo.protected_fun();//验证protected成员外部可见性,这里提示错误
    foo.private_fun();//验证private成员外部可见性,这里提示错误
    return 0;  
}

C++的垂直访问控制

当private,public,protected作为继承方式时:
派生类可以继承基类中除了构造函数与析构函数(凡是与具体对象的类别息息相关的都不能被继承,赋值运算符重载函数也不能被继承)之外的成员,但是这些成员的访问属性在派生过程中是可以调整的。从基类继承来的成员在派生类中的访问属性是由继承方式控制的。
总结为下表:
这里写图片描述

派生类对基类成员的访问形式主要有以下两种:

  • 内部访问:由派生类中新增的成员函数对基类继承来的成员的访问。
  • 外部访问:在派生类外部,通过派生类的对象对从基类继承来的成员的访问。

猜你喜欢

转载自blog.csdn.net/weixin_42018112/article/details/82427071
今日推荐