【c++】访问控制

简介:

1.  类内的访问控制

  1. 在基类中,public和private具有普通的含义:用户(即基类的对象)可以访问public成员(包括函数、数据),而不能访问private成员。private只能被基类的成员和友员访问。(:基类的对象无权访问private成员)
  2. 派生类对基类的public和private具有相同的含义:它可以访问public成员,不可以访问private成员。派生类对象亦如此。
  3. 为了使派生类(:是类, 不是类对象)可以基类的成员,但禁止基类的对象访问,定义了protected控制。基类protected成员,派生类可以访问,但基类以及派生类的对象是不行的。

示例

复制代码
#include <iostream>
#include <stdexcept>
#include <string>
#include <vector>
using namespace std;

class Item_base
{
    public:
        Item_base(const string &book = "", double sales_price = 0.0) : isbn(book), price(sales_price) {};
        virtual ~Item_base() {}
    private:
        string isbn;
    protected:
        double price;
};
class Bulk_item : public Item_base
{
    public:
        void print_hello() { cout << price << endl; }
};


int main()
{
    Bulk_item b;
    b.print_hello();
}
复制代码

结果

0

2. 派生列表的访问控制

派生类中由两部分构成:基类的一部分+自身定义的一部分。派生类列表中访问控制,将影响基类的部分在派生类中的访问级别:

  • 如果为公有继承:派生类中的基类成员保持自己的访问级别:public还是public, private还是private,protected还是protected
  • 如果为私有继承:派生类中基类的所有成员将全部为private成员
  • 如果为受保护继承:派生类中基类的public、protected成员变为protected成员,private还是private

总之:派生类可以进一步限制,但是不可以放松对所有继承成员的访问

注意:私有继承类成员中仍可以访问基类的public, private成员,只是基类的部分在派生类中的性质变为:private。

例证1

复制代码
#include <iostream>
#include <string>
using namespace std;

class base
{
    public:
        base(int p1=1, int p2=2, int p3=3) : pub(p1), pri(p2), pro(p3) {}
        int pub;
    private:
        int pri;
    protected:
        int pro;
};

class derived_private : protected base
{
    public:
        void print_pri() 
        { 
            cout << "pub:" << pub << endl;
            cout << "pro:" << pro << endl;
        }
};

int main()
{
    base b;
    derived_private d;
    d.print_pri();
}
复制代码

结果1

 

例证2

复制代码
#include <iostream>
#include <string>
using namespace std;

class base
{
    public:
        base(int p1=1, int p2=2, int p3=3) : pub(p1), pri(p2), pro(p3) {}
        int pub;
    private:
        int pri;
    protected:
        int pro;
};

class derived_private : private base
{
    public:
        void print_pri() 
        { 
            cout << "pub:" << pub << endl;
            cout << "pro:" << pro << endl;
        }
};

int main()
{
    base b;
    derived_private d;
    cout << d.pub << endl;
    cout << d.pri << endl;
    cout << d.pro << endl;
}
复制代码

结果2

 





本文转自jihite博客园博客,原文链接:http://www.cnblogs.com/kaituorensheng/p/3507986.html,如需转载请自行联系原作者

相关实践学习
云安全基础课 - 访问控制概述
课程大纲 课程目标和内容介绍视频时长 访问控制概述视频时长 身份标识和认证技术视频时长 授权机制视频时长 访问控制的常见攻击视频时长
相关文章
|
1月前
|
C++
C++系列十八:访问控制符
C++系列十八:访问控制符
|
5月前
|
数据安全/隐私保护 C++
43 C++ - 派生类访问控制
43 C++ - 派生类访问控制
31 0
|
3月前
|
存储 数据安全/隐私保护 C++
第十五章:C++访问控制权限、继承和多态详解
第十五章:C++访问控制权限、继承和多态详解
197 0
|
9月前
|
数据安全/隐私保护 C++
C++访问控制、派生类构造与析构函数
C++访问控制、派生类构造与析构函数
C++访问控制、派生类构造与析构函数
|
12月前
|
Java 数据安全/隐私保护 Android开发
Android C++系列:C++最佳实践3继承与访问控制
整个结构还是比较简单的,从类内部到本包到子类到外部包权限越来越小,比较好理解也比较好记忆。但是在C++中访问控制要复杂很多,因为不仅有属性和方法的访问控制,还有继承时的派生列表访问说明符。今天我们着重了解访问控制。
69 0
|
Linux 数据安全/隐私保护 C++
嵌入式linux基础:c++(二)访问控制
嵌入式linux基础:c++(二)访问控制
116 0
|
4天前
|
存储 编译器 C语言
c++的学习之路:5、类和对象(1)
c++的学习之路:5、类和对象(1)
19 0
|
3天前
|
C++
c++的学习之路:7、类和对象(3)
c++的学习之路:7、类和对象(3)
19 0
|
2天前
|
设计模式 Java C++
【C++高阶(八)】单例模式&特殊类的设计
【C++高阶(八)】单例模式&特殊类的设计
|
2天前
|
编译器 C++
【C++基础(八)】类和对象(下)--初始化列表,友元,匿名对象
【C++基础(八)】类和对象(下)--初始化列表,友元,匿名对象