protected成员在什么范围内是可以被访问的_C++中的访问修饰符

本文介绍了C++中的访问修饰符,重点解析了protected成员的访问特性。protected成员允许在类的子类中访问,但对外部代码保持私有,以此实现数据隐藏和面向对象编程中的封装。通过示例展示了public、private和protected的使用场景,帮助读者深入理解这三个访问修饰符的作用。
摘要由CSDN通过智能技术生成
05865a767b51bf74070209127ae0bdfc.png

访问修饰符用于实现称为数据隐藏的面向对象编程的重要功能。考虑一个真实的例子:

具有7名高级成员的公司董事会具有一些公司最高机密。因此,我们可以认为有7个人作为类数据成员或成员职能,他们可以直接彼此访问秘密信息,但除了这7个成员之外,任何人都无法访问此信息,即外部人员没有特权就无法直接访问信息。这就是数据隐藏。

类中的访问修饰符或访问说明符用于设置类成员的可访问性。也就是说,它对类成员设置了一些限制,使其不能被外部函数直接访问。

C++中提供了三种访问修饰符:

  • Public
  • Private
  • Protected

注意:如果我们没有为类内的成员指定任何访问修饰符,则默认情况下,成员的访问修饰符将为Private。

现在让我们详细了解这些访问修饰符:

1.Public:Public声明的所有类成员将对所有人开放。声明为public的数据成员和成员函数也可以由其他类访问。 可以使用具有该类对象的直接成员访问运算符(.)从程序中的任何位置访问该类的公共成员。

示例:

// C++ program to demonstrate public // access modifier   #include using namespace std;   // class definition class Circle {     public:          double radius;                   double  compute_area()         {             return 3.14*radius*radius;         }       };   // main function int main() {     Circle obj;           // accessing public datamember outside class     obj.radius = 5.5;           cout << "Radius is: " << obj.radius << "";     cout << "Area is: " << obj.compute_area();     return 0; } 

输出:

Radius is: 5.5Area is: 94.985

在上面的程序中,数据成员radius是公共的,因此我们可以在类之外访问它。

2.Private:声明为Private的类成员只能由该类内部的函数访问。类之外的任何对象或函数都不允许直接访问它们。只允许成员函数或friend函数访问类的私有数据成员。

示例:

// C++ program to demonstrate private // access modifier   #include using namespace std;   class Circle {        // private data member     private:          double radius;            // public member function         public:             double  compute_area()         {   // member function can access private              // data member radius             return 3.14*radius*radius;         }       };   // main function int main() {        // creating object of the class     Circle obj;           // trying to access private data member     // directly outside the class     obj.radius = 1.5;           cout << "Area is:" << obj.compute_area();     return 0; } 

输出:

In function 'int main()':11:16: error: 'double Circle::radius' is private         double radius;                ^31:9: error: within this context     obj.radius = 1.5;         ^

上面程序的输出将是编译时错误,因为不允许我们直接在类外部访问类的私有数据成员。

但是,我们可以使用类的公共成员函数间接访问类的私有数据成员。下面的程序说明了如何执行此操作:

// C++ program to demonstrate private // access modifier   #include using namespace std;   class Circle {        // private data member     private:          double radius;            // public member function         public:             void compute_area(double r)         {   // member function can access private              // data member radius             radius = r;                           double area = 3.14*radius*radius;                           cout << "Radius is: " << radius << endl;             cout << "Area is: " << area;         }       };   // main function int main() {        // creating object of the class     Circle obj;           // trying to access private data member     // directly outside the class     obj.compute_area(1.5);                 return 0; } 

输出:

Radius is: 1.5Area is: 7.065

3.Protected:受保护的访问修饰符与私有访问修饰符相似,不同之处在于,声明为“Protected”的类成员在类外部无法访问,但可以由该类的任何子类(派生类)访问。

示例:

// C++ program to demonstrate // protected access modifier #include  using namespace std;   // base class class Parent {        // protected data members     protected:     int id_protected;      };   // sub class or derived class class Child : public Parent {                public:     void setId(int id)     {                   // Child class is able to access the inherited          // protected data members of base class                   id_protected = id;               }           void displayId()     {         cout << "id_protected is: " << id_protected << endl;     } };   // main function int main() {           Child obj1;           // member function of the derived class can     // access the protected data members of the base class           obj1.setId(81);     obj1.displayId();     return 0; } 

输出:

id_protected is: 81
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值