2022年2022年类访问权限 .pdf

上传人:C****o 文档编号:39694120 上传时间:2022-09-07 格式:PDF 页数:4 大小:46.67KB
返回 下载 相关 举报
2022年2022年类访问权限 .pdf_第1页
第1页 / 共4页
2022年2022年类访问权限 .pdf_第2页
第2页 / 共4页
点击查看更多>>
资源描述

《2022年2022年类访问权限 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年类访问权限 .pdf(4页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、0 推荐1、类成员的访问控制类在定义时可以定义其成员的访问级别。C+规定有三种访问控制属性:public、protected和 private。(1)public:类的成员函数、类的对象和该类的派生类都可以访问。(2)protected:类的成员函数和该类的派生类可以访问。(3)private:只有本类的成员函数可以访问。protected与 private有何区别:这两个是访问类中成员权限的限制符。在类外如果想使用类中的成员,只能直接使用 public类型的,protected和 private都是不能访问的,对于类外使用而言,这两个是完全相同的。但是在基类的派生类中,可以直接访问继承而来的

2、 protected成员,但是不能访问private限制的成员。所以在派生类中,可以访问基类继承而来的public和 proected 两种类型的成员。在 public公有派生下,继承而来的成员访问权限不变;protected派生下,public和 protected 都变成 protected;private派生下,所有的继承下来都是private了。(本段摘自:http:/ public(公有)继承、protected(保护)继承和private(私有)继承。(1)public(公有)继承:派生类的成员函数、派生类的对象、派生类的派生类的成员函数和派生类的派生类的对象都可以访问基类的pub

3、lic 成员;派生类的成员函数和派生类的派生类的成员函数可以访问基类的protected成员。(2)protected(保护)继承:派生类的成员函数和派生类的派生类的成员函数都可以访问基类的public 和 protected成员。(3)private(私有)继承:派生类的成员函数可以访问基类的public 和 protected成员。下表为继承方式与访问属性的关系:基类中访问属性继承方式派生类成员派生类对象派生类的派生类的成员派生类的派生类的对象public public 可访问可访问可访问可访问protected 可访问可访问private protected public 可访问可访问p

4、rotected 可访问可访问private private public 可访问protected 可访问private 注:(1)表格中的空表示不可访问。名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 4 页 -(2)对表中红色加粗的“可访问”的解释:有两个类A和 B,B由 A的公有继承派生而来。A中有一个访问属性为public的方法 getN(),则对于派生类 B中的所有成员都可以访问getN()。指向函数的指针声明:(*函数指针变量名)(参数表)例:i nclude int add(int x,int y)return x+y;int sub(int x,int y)re

5、turn x-y;int oper(int(*a)(int,int),int x,int y)/a为指向函数的指针 return a(x,y);void main()cout oper(add,1,2)endl;coutoper(sub,1,2)endl;运行结果:3-1 C+中析构函数定义成虚函数的原因2008-06-04 22:12 为什么标准 C+建议将虚构函数定义成虚函数,下面就来探讨这个问题。#include class Base public:Base()data=new char64;Base()delete data;private:char*data;名师资料总结-精品资料欢

6、迎下载-名师精心整理-第 2 页,共 4 页 -class BaseEx:public Base public:BaseEx()m_data=new char64;BaseEx()delete m_data;private:char*m_data;void main()Base*pCBase=new BaseEx;delete pCBase;很显然,上述的程序有内存泄漏。这是因为当删除pCBase时,它只调用了 Base的析构函数而没调用BaseEx的析构函数,所以导致内存泄漏。再看下例:#include class CBase public:CBase()data=new char64;CB

7、ase()delete data;private:char*data;class CFunction public:CFunction();CFunction();class CFunctionEx:public CFunction public:CFunctionEx();CFunctionEx();private:CBase m_cbase;void main()CFunction*pCFun=new CFunctionEx;名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 4 页 -delete pCFun;这里 CfunctionEx和 Cfunction中本身并没有分配内

8、存,应该不会有内存泄漏。和上例一样当删除pCFun时,它只调用了 Cfunction的析构函数而没调用 CfunctionEx的析构函数,但 CfunctionEx 本身并没分配内存。所以发生内存泄露的地方是 m_cbase,因为它是 CBase的实例且是 CfunctionEx 成员变量,当CfunctionEx 的析构函数没有被调用时,当然 m_cbase的析构函数也没有被调用,所以 CBase中分配的内存被泄漏。解决以上问题的方法很简单,就是使基类 Cfunction的析构函数为虚函数就可以了。这样就得出一个结论,当你的基类的析构函数不为虚的话,其子类中所有的成员变量的类中分配的内存也将可能泄漏。这里说的可能是因为,如果程序中没有以上示例类似写法(指用基类指针指向子类实例,虚函数是 C+的精华,很少有人不用的,由其是在大中型软件项目中),就不会出现本文所说的内存泄漏。看来在基类中使析构函数为虚函数是如此的重要。所以强烈建议在基类中把析构函数声明为虚函数,但是只有你写的类并不做为基类时例外。名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 4 页 -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁