C++访问属性和继承属性浅析
对于初学者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++访问属性和继承属性浅析相关推荐
- 如何更好地理解Javascript对象的自有属性和原型继承属性
Javascript对象具有"自有属性"(own property),也有一些属性是从原型对象继承而来的.为了更好地理解对象自有属性和继承属性下面的示例深入解释了属性的访问和设置细 ...
- JavaScript中的属性:如何遍历属性
JavaScript中的属性:如何遍历属性 在JavaScript中,遍历一个对象的属性往往没有在其他语言中遍历一个哈希(有些语言称为字典)的键那么简单.这主要有两个方面的原因:一个是,JavaScr ...
- [转] JavaScript中的属性:如何遍历属性
在JavaScript中,遍历一个对象的属性往往没有在其他语言中遍历一个哈希(有些语言称为字典)的键那么简单.这主要有两个方面的原因:一个是,JavaScript中的对象通常都处在某个原型链中,它会从 ...
- 编译原理—语法制导翻译、S属性、L属性、自上而下、自下而上计算
编译原理-语法制导翻译.S属性.L属性.自上而下.自下而上计算 1.语法制导翻译 1.1属性文法 1.2算术表达式的计数器 1.3属性的分类 1.4属性依赖图 继承属性的计算 1.5语义规则的计算方法 ...
- python完全支持面向对象编程思想_面向对象的编程思想和Python的类,访问和属性,继承...
本文将从访问限制,属性,继承,方法重写这几个方面继续介绍面向对象的编程思想和Python类的继承. 复制代码 一.访问权限: Python中在类的内部定义属性和方法,在类的外部是可以直接调用或进行访问 ...
- php继承exten,es6,extends_react中通过extend继承,父组件为什么能访问子组件的属性,es6,extends,react.js - phpStudy...
react中通过extend继承,父组件为什么能访问子组件的属性 代码如下,在父类的componentWillMount方法中输出 this,打印的却是子类 item 通过webpack的编译后文件中 ...
- python 类和对象_面向对象的编程思想和Python的类,访问和属性,继承
面向对象的编程思想和Python的类,类的方法和属性,实例方法这一文从面向对象的角度,介绍类的定义,类的属性和自定义方法. 本文将从访问限制,属性,继承,方法重写这几个方面继续介绍面向对象的编程思想和 ...
- class传参 python_Python类的概念、定义、属性、继承
1.面向对象(Object Oriented,OO)概念 面向对象,是我们编程的一种思维. 早期的计算机编程是基于面向过程的方法,例如实现算术运算1+1+2 = 4,通过设计一个算法就可以解决当时的问 ...
- p怎么调用python的实例属性_Python中类的声明,使用,属性,实例属性,计算属性及继承,重写...
Python中的类的定义以及使用: 类的定义: 定义类 在Python中,类的定义使用class关键字来实现 语法如下:classclassName:"类的注释"类的实体 (当没有 ...
最新文章
- Windows 10下编译安装Hadoop2.6
- CentOS7.5安装配置PostgreSQL11
- centos 7手动更改源
- Linux platform总线(1):总体框架
- 倒计时 | 7.24 阿里云 Serverless Developer Meetup 杭州站报名火热进行中!
- java调用outlook
- MemoryMonitor内存监视器
- 电影评论分类:二分类问题
- 语言用符号打印出落叶的图案_世界上最好玩的6种表情符号编程语言
- Latente Wärme
- Linux关于qt缺少xcb问题解决办法
- Frequent Itemset Mining 频繁项集查找
- 本世纪最好的NSA!
- 【2021最新】各大公司招聘官网链接汇总(持续更新中)
- 乡村老师网络计算机培训日志,乡村教师网络研修心得体会
- 作为一名工程师,你应该专注于成为一名多面手还是专家?
- 基于C语言的虚数运算
- solidity的call跟delegatecall
- neo4j图形数据库第七弹——整合vis.js实现数据可视化
- 数据才是车联网的未来
热门文章
- Android动态替换dex,Android DexClassLoader动态加载与插件化开发
- c语言怎样在不足n位数的整数前补0,C# String 前面不足位数补零的方法
- mysql栏的范围外值,MySQL中各种字段的取值范围-数据库专栏,MySQL
- 'python program'.count('p')的值是_如何用Python分析泰坦尼克号生还率?
- 第二种PHP协议,PHP多种形式,第二种使用来自First的数据
- 测试MindMotion MM32F3277 MicroPython -2021-11-20新增PWM版本
- 基于黄色LED反向电流的光电检测板
- 2021年春季学期-信号与系统-第四次作业参考答案-第一小题
- rmi反序列化导致rce漏洞修复_JAVA反序列化漏洞解决办法
- html给img添加滤镜,给图片在博客中添加滤镜效果_CSS/HTML