ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

类的访问修饰符

2022-05-08 20:32:45  阅读:230  来源: 互联网

标签:成员 修饰符 private 访问 protected 派生类 public


数据封装是面向对象编程的一个重要特点,它防止函数直接访问类类型的内部成员。类成员的访问限制是通过在类主体内部对各个区域标记 public、private、protected 来指定的。关键字 public、private、protected 称为访问修饰符。一个类可以有多个 public、protected 或 private 标记区域。每个标记区域在下一个标记区域开始之前或者在遇到类主体结束右括号之前都是有效的。成员和类的默认访问修饰符是 private。

  • public 成员在程序中类的外部是可访问的。您可以不使用任何成员函数来设置和获取公有变量的值
  • protected 成员变量或函数与私有成员十分相似,但有一点不同,protected(受保护)成员在派生类(即子类)中是可访问的。
  • private 成员变量或函数在类的外部是不可访问的,甚至是不可查看的。只有类和友元函数可以访问私有成员

在继承中的特点:

  • public 继承:基类 public 成员,protected 成员,private 成员的访问属性在派生类中分别变成:public, protected, private

  • protected 继承:基类 public 成员,protected 成员,private 成员的访问属性在派生类中分别变成:protected, protected, private

  • private 继承:基类 public 成员,protected 成员,private 成员的访问属性在派生类中分别变成:private, private, private

但无论哪种继承方式,上面两点都没有改变:

  • private 成员只能被本类成员(类内)和友元访问,不能被派生类访问;

  • protected 成员可以被派生类访问。

 

#include <iostream>
 
using namespace std;
 
 class test_A
 {
public:
     int A_public ;

     test_A()
     {
        A_public = 202;
        A_protected = 10;
        A_private = 100;
     }

     void foo()
     {
         cout << "A_public : " << A_public << endl;
         cout << "A_protected : " << A_protected << endl;
         cout << "A_private : " << A_private << endl;
     }

protected:
     int A_protected;

private:
     int A_private;

 };

 class test_B : public test_A
 {
public:
     int B_public ;

     test_B(int a)
     {
        test_A();
        B_public = a;
     }

     void foo()
     {
         cout << "B_public : " << B_public << endl;
         cout << "A_public : " << A_public << endl;
         cout << "A_protected : " << A_protected << endl;
        //  cout << "A_private : " << A_private << endl; //这条语句是错的,继承类不能访问父类private成员
     }
 };

  class test_C : protected test_A
 {
public:
     int C_public ;

     test_C(int a)
     {
         test_A();
        C_public = a;
     }

     void foo()
     {
        cout << "C_public : " << C_public << endl;
         cout << "A_public : " << A_public << endl;
         cout << "A_protected : " << A_protected << endl;
        //  cout << "A_private : " << A_private << endl; //这条语句是错的,继承类不能访问父类private成员
     }

 };

   class test_D : private test_A
 {
public:
     int D_public ;

     test_D(int a)
     {
         test_A();
        D_public = a;
     }

     void foo()
     {
        cout << "C_public : " << D_public << endl;
         cout << "A_public : " << A_public << endl;
         cout << "A_protected : " << A_protected << endl;
        //  cout << "A_private : " << A_private << endl; //这条语句是错的,继承类不能访问父类private成员
     }

 };

int main ()
{
 test_A A;
 A.foo();

test_B B(300);
B.foo();

test_C C(400);
C.foo();
// C.A_protected; //protected不能在类外访问 
// C.A_private; //private不能在类外访问 

test_D D(500);
D.foo();

   return 0;
}

 

标签:成员,修饰符,private,访问,protected,派生类,public
来源: https://www.cnblogs.com/boost/p/16246752.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有