对于初学者C++的属性控制以及继承属性还是比较那掌握的,笔者在这里总结一下自己学习这些过程的见解。首先我们来看:


1、C++支持的访问属性有public、protected、private,下来我浅谈一下我在学习过程中的一些领悟。

1、对于public

1、该类中的函数、子类中的函数、其友元函数的访问以及该类中的对象

2、我个人一直觉得用代码理解概念是一个很好的方法,下边我将给出一些我的测试用例:

class Base
{
public://友元函数friend void friend_Show(Base &bb);
public:Base():x(0),px(0){ }~Base(){ }
public://公有属性int px;void ShowBase(){cout<<"I am Show Base and am public"<<endl;}void Test(){cout<<"I am Test"<<endl;//测试保护方法调用公有方法成功了吗Print();//测试公有属性可以被保护方法修改吗cout<<"px = "<<px<<endl;//测试私有方法调用公有方法Print_Private();//测试私有方法修改公有属性cout<<"px = "<<px<<endl;}
protected:void Print(){cout<<"I am Print "<<endl;//公有方法被保护成员访问ShowBase();//保护方法修改公有属性px = 10; }
private:void Print_Private(){cout<<"I am Pint_Private"<<endl;//公有成员被私有成员访问ShowBase();//私有方法修改公有属性px = 20;}
private:int x;};
void friend_Show(Base &bb)
{cout<<"I am friend_Show"<<endl;//友元方法访问公有属性bb.px= 30;友元方法访问公有方法bb.ShowBase();}
void main()
{Base bb;bb.Test();//测试友元方法方法公有属性和方法friend_Show(bb);cout<<"bb.px = "<<bb.px<<endl;}

运行结果:

上边的测试代码我给出了尽可能多注释,验证了上边几个属性,除了子类中的函数的访问属性没有给出测试用例,其他的都给出了测试用例。子类中的函数的访问属性我下边将作为一个专门的模块总结。


         2、对于ptotected

1、可以被类中的函数、子类中的函数、其友元函数、该类的对象访问

2、这里我同样给出测试代码:

class Base
{
public://友元函数friend void friend_Show(Base &bb);
public:Base():x(0),pp(0)  {   }~Base()    {    }
public:void ShowBase(){cout<<"I am Show Base and am public"<<endl;//调用保护属性Print();//修改保护属性pp = 40;}void Test(){cout<<"I am Test"<<endl;//测试保护方法调用保护方法Test_proteced();//测试公保护方法修改保护属性cout<<"pp = "<<pp<<endl;//测试私有方法调用保护方法Print_Private();//测试私有方法修改保护属性cout<<"pp = "<<pp<<endl;//测试公有方法调用保护方法ShowBase();//测试公有方法修改保护属性cout<<"pp = "<<pp<<endl;}void TestFriend(){cout<<"I am TestFriend"<<endl;cout<<"pp = "<<pp<<endl;}
protected:int pp;void Print(){cout<<"I am Print and am protected "<<endl;}void Test_proteced(){cout<<"I am Test_proteced "<<endl;//测试保护方法调用Print();pp = 50;}
private:void Print_Private(){cout<<"I am Pint_Private"<<endl;//公有成员被私有成员访问Print();//私有方法修改保护属性pp = 60;}
private:int x;};void friend_Show(Base &bb)
{cout<<"I am friend_Show"<<endl;//友元方法访问保护属性bb.pp= 30;友元方法访问保护方法bb.Print();}void main()
{Base bb;bb.Test();//测试友元方法方法公有属性和方法friend_Show(bb);bb.TestFriend();}

运行结果:

同样我在代码中给出了尽可能详尽的注释,对除了子函数中的访问没有给出,子函数的访问权限后边我将作为一个专门的模块总结。


3、对于private修饰符

1、只能有该类中的函数以及其友元函数访问,不能被任何其他函数和对象访问。

2、同样我也给出测试代码:

class Base
{
public://友元函数friend void friend_Show(Base &bb);
public:Base():x(0)  {  }~Base()   {    }
public:void ShowBase(){cout<<"I am Show Base and am public"<<endl;//调用私有属性Print_Private();//修改私有属性x = 200;}void Test(){cout<<"I am Test"<<endl;//测试公有方法调用保护方法ShowBase();//测试公有方法修改私有属性cout<<"x = "<<x<<endl;//测试保护方法调用私有方法Print();//测试保护方法修改私有属性cout<<"x = "<<x<<endl;//测试私有方法调用私有方法Test_Private();//测试是由私有方法修改私有属性cout<<"x = "<<x<<endl;    }void TestFriend(){cout<<"I am TestFriend"<<endl;cout<<"x = "<<x<<endl;}
protected:void Print(){cout<<"I am Print and am protected "<<endl;//测试访问私有属性的方法Print_Private();//测试调用属性的属性x = 100;}
private:void Print_Private(){cout<<"I am Pint_Private"<<endl;}void  Test_Private(){cout<<"I am Test_priavate"<<endl;Print_Private();}
private:int x;};void friend_Show(Base &bb)
{cout<<"I am friend_Show"<<endl;//友元方法访问私有属性bb.x= 300;友元方法访问私有方法bb.Print_Private();}void main()
{Base bb;bb.Test();//测试友元方法方法公有属性和方法friend_Show(bb);bb.TestFriend();}

运行结果:

最后也同样给出了privete访问控制测试代码以及截图,验证了我上边给出的访问控制权限。


限于篇幅这里只给出了基本的访问控制权限,没有给出子类中的访问控制权限测试案例,以及规律,子类中访问控制权限我将在下一篇的博文中给出。

转载于:https://blog.51cto.com/967243153/2064410

C++访问属性和继承属性浅析相关推荐

  1. 如何更好地理解Javascript对象的自有属性和原型继承属性

    Javascript对象具有"自有属性"(own property),也有一些属性是从原型对象继承而来的.为了更好地理解对象自有属性和继承属性下面的示例深入解释了属性的访问和设置细 ...

  2. JavaScript中的属性:如何遍历属性

    JavaScript中的属性:如何遍历属性 在JavaScript中,遍历一个对象的属性往往没有在其他语言中遍历一个哈希(有些语言称为字典)的键那么简单.这主要有两个方面的原因:一个是,JavaScr ...

  3. [转] JavaScript中的属性:如何遍历属性

    在JavaScript中,遍历一个对象的属性往往没有在其他语言中遍历一个哈希(有些语言称为字典)的键那么简单.这主要有两个方面的原因:一个是,JavaScript中的对象通常都处在某个原型链中,它会从 ...

  4. 编译原理—语法制导翻译、S属性、L属性、自上而下、自下而上计算

    编译原理-语法制导翻译.S属性.L属性.自上而下.自下而上计算 1.语法制导翻译 1.1属性文法 1.2算术表达式的计数器 1.3属性的分类 1.4属性依赖图 继承属性的计算 1.5语义规则的计算方法 ...

  5. python完全支持面向对象编程思想_面向对象的编程思想和Python的类,访问和属性,继承...

    本文将从访问限制,属性,继承,方法重写这几个方面继续介绍面向对象的编程思想和Python类的继承. 复制代码 一.访问权限: Python中在类的内部定义属性和方法,在类的外部是可以直接调用或进行访问 ...

  6. php继承exten,es6,extends_react中通过extend继承,父组件为什么能访问子组件的属性,es6,extends,react.js - phpStudy...

    react中通过extend继承,父组件为什么能访问子组件的属性 代码如下,在父类的componentWillMount方法中输出 this,打印的却是子类 item 通过webpack的编译后文件中 ...

  7. python 类和对象_面向对象的编程思想和Python的类,访问和属性,继承

    面向对象的编程思想和Python的类,类的方法和属性,实例方法这一文从面向对象的角度,介绍类的定义,类的属性和自定义方法. 本文将从访问限制,属性,继承,方法重写这几个方面继续介绍面向对象的编程思想和 ...

  8. class传参 python_Python类的概念、定义、属性、继承

    1.面向对象(Object Oriented,OO)概念 面向对象,是我们编程的一种思维. 早期的计算机编程是基于面向过程的方法,例如实现算术运算1+1+2 = 4,通过设计一个算法就可以解决当时的问 ...

  9. p怎么调用python的实例属性_Python中类的声明,使用,属性,实例属性,计算属性及继承,重写...

    Python中的类的定义以及使用: 类的定义: 定义类 在Python中,类的定义使用class关键字来实现 语法如下:classclassName:"类的注释"类的实体 (当没有 ...

最新文章

  1. 基于Flink的高可靠实时ETL系统
  2. 阿里P7大牛整理!BAT大厂面试基础题集合,成功入职字节跳动
  3. git上传分支的原理_GIT分支,创建分支与合并分支的工作原理与教程
  4. C语言线性表怎么输入字符串,用c语言创建一个线性表输入元素求直接后继
  5. android移动开发慕课版本_Android移动开发基础教程(慕课版)
  6. trend函数用oracle实现,使用TREND函数和LINEST函数做销售预测或成本分析
  7. 函的红头文件格式制作_如何利用Word“智能函头”简单制作“红头文件”公文模板...
  8. Unity2018发布webgl视频无法播放
  9. 视频播放器软件哪个最好用?盘点6款Windows电脑上超级好用的本地视频播放器
  10. python自动化测试课程学费一般多少 学习方式不同,价格也会存在差异
  11. go语言学习:语言简介
  12. Python之OpenGL笔记(17):键盘鼠标控制摄像机移动旋转
  13. npm包发布正式和测试版
  14. htc+820+android+5.0,htc 820s和htc one m8哪个好?两者有什么区别?
  15. 本周电影:《阮玲玉》,1992年张曼玉主演电影,DVD高清版
  16. 基于SpringCloudAlibaba模拟商城下单功能
  17. vbox虚拟机无法桥接网卡怎么办
  18. Unity摄像机详解
  19. S3 口腔CT设计-任务图
  20. 武林外传显示服务器连接失败,武林外传手游服务器链接失败怎么回事_武林外传手游服务器链接失败如何解决_玩游戏网...

热门文章

  1. android 导入sqlite文件怎么打开,如何将sqlite文件导入到我的项目中?
  2. html获取cookie_知了汇智《XSS攻击-盗取cookie实战》课程文档讲解
  3. JQuery - Sizzle选择器引擎原理分析
  4. -m commit git_走在前沿的弄潮儿,怎能不会Git的那些奇技淫巧
  5. sqap不支持python3吗_Supporting Python 3(支持python3)——欢迎来到Python 3
  6. actframework mysql_问题处理记录
  7. 如何从MP4视频文件中抽取MP3音频?
  8. 2020年人工神经网络第二次作业
  9. 新车模、新舵机、新体验
  10. 转载:识别圆环的一种思路