【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,如需转载请自行联系原作者

相关文章
|
数据安全/隐私保护 C++
43 C++ - 派生类访问控制
43 C++ - 派生类访问控制
118 0
|
编译器 数据安全/隐私保护 C++
C++一分钟之-属性友元与访问控制
【7月更文挑战第9天】C++中的友元机制允许非成员函数或类访问私有和保护成员,打破了封装性。友元需在类内声明,常见的错误包括忘记声明、过度使用及误解友元的非继承性。要避免错误,应明确声明友元,限制其使用,并理解其局限。示例展示了如何声明和使用友元函数来访问私有数据。谨慎使用友元以保持代码的健壮性和可维护性。
234 1
|
安全 数据安全/隐私保护 C++
C++一分钟之-成员访问控制:public, private, protected
【6月更文挑战第20天】C++的成员访问控制涉及`public`、`private`和`protected`,影响类成员的可见性和可访问性。`public`成员对外公开,用于接口;`private`成员仅限类内部,保护数据安全;`protected`成员在派生类中可访问。常见问题包括不恰当的访问级别选择、继承中的访问权限误解及过度使用友元。通过示例展示了如何在派生类中访问`protected`成员。正确使用访问修饰符能确保代码的封装性、安全性和可维护性。
658 4
|
数据安全/隐私保护 C++
C++ 类方法解析:内外定义、参数、访问控制与静态方法详解
C++ 中的类方法(成员函数)分为类内定义和类外定义,用于操作类数据。类内定义直接在类中声明和定义,而类外定义则先在类中声明,再外部定义。方法可以有参数,访问权限可通过 public、private 和 protected 控制。静态方法与类关联,不依赖对象实例,直接用类名调用。了解这些概念有助于面向对象编程。
554 0
C++系列十八:访问控制符
C++系列十八:访问控制符
|
存储 数据安全/隐私保护 C++
第十五章:C++访问控制权限、继承和多态详解
第十五章:C++访问控制权限、继承和多态详解
449 0
|
数据安全/隐私保护 C++
C++访问控制、派生类构造与析构函数
C++访问控制、派生类构造与析构函数
C++访问控制、派生类构造与析构函数
|
Java 数据安全/隐私保护 Android开发
Android C++系列:C++最佳实践3继承与访问控制
整个结构还是比较简单的,从类内部到本包到子类到外部包权限越来越小,比较好理解也比较好记忆。但是在C++中访问控制要复杂很多,因为不仅有属性和方法的访问控制,还有继承时的派生列表访问说明符。今天我们着重了解访问控制。
196 0
|
Linux 数据安全/隐私保护 C++
嵌入式linux基础:c++(二)访问控制
嵌入式linux基础:c++(二)访问控制
232 0
|
9月前
|
编译器 C++ 开发者
【C++篇】深度解析类与对象(下)
在上一篇博客中,我们学习了C++的基础类与对象概念,包括类的定义、对象的使用和构造函数的作用。在这一篇,我们将深入探讨C++类的一些重要特性,如构造函数的高级用法、类型转换、static成员、友元、内部类、匿名对象,以及对象拷贝优化等。这些内容可以帮助你更好地理解和应用面向对象编程的核心理念,提升代码的健壮性、灵活性和可维护性。