欢迎来到天天文库
浏览记录
ID:26955885
大小:360.50 KB
页数:34页
时间:2018-11-30
《《类隐藏实现》ppt课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第五章类:隐藏实现面向对象程序设计(C++)5.2隐藏实现:例内部电路(实现)有不同;但操作界面(接口)总是相同的。KV-HR32M90Ver1.1Ver1.05.2隐藏实现:必要性让库的使用者远离一些他们不需要知道的内部实现;允许库的设计者改变内部实现,而不必担心对客户程序员造成什么影响。5.2隐藏实现:原则Public:turn_on();turn_off();volume_up();volume_down();change_channel();private:change_red();change_blue();change_green();……boundary将类的功能描述部分作为共
2、有部分接口提供给用户;将数据的内部表示、功能的内部实现作为私有部分隐藏起来。5.2.1C++的访问控制Public/private/protectedPublic:公有成员,其后声明的所有成员可以被所有的人访问。Private:私有成员,除了该类型的创建者和类的内部成员函数之外,任何人不能访问。Protected:保护成员,与Private基本相同,区别是继承的结构可以访问Protected成员,但不可以访问Private成员。intmain(){Bb;b.i=1;//OK,public//!b.j='1';//illegal,//!b.f=1.0;//illegal,b.func();//
3、OK,public}///:~注:protected修饰符将在后续章节解释设置访问控制structB{private:charj;floatf;public:inti;voidfunc();};voidB::func(){Btempb;tempb.j=‘a’;//OKi=0;j='0';f=0.0;};OOP的观点访问控制在库的设计者(实现者)和库的使用者之间划了一道明显的界线;j和f需要保护;i和func()可以公开若试图访问一个私有成员,就会产生一个编译时错误。5.2.2友元友元:显示地声明哪些人“可以访问我的私有实现部分”。表明的是一种“信任”的关系。structCfather{fri
4、endstructCMother;//赋予CMother访问//Cfather的salary的权利private:longsalary;…;};structCMother{priavte:voidinspect(){Cfatherobj_TaDie(8000);cout<<“月收入:”<5、类型说明structY{voidf(X*);};structX{//Definitionprivate:inti;public:voidinitialize();friendvoidg(X*,int);//全局函数友元friendstructZ;//类友元friendvoidY::f(X*);//成员函数友元friendvoidh();//全局函数友元};voidX::initialize(){i=0;//类X的初始化函数}voidg(X*x,inti){x->i=i;//访问X的私有成员i}voidY::f(X*x){x->i=47;//访问X的私有成员i}voidh(){Xx;x.i=16、00;//直接访问私有成员}intmain(){Xx;Zz;z.g(&x);}///:~structZ{private:intj;public:voidinitialize();voidg(X*x);};voidZ::initialize(){j=99;}voidZ::g(X*x){x->i+=j;}OOP的视点友员不是OOP的特征,破坏了封装性,这也是C++不是“纯”面向对象语言的原因之一。5.2.3从struct到class封装:数据成员+成员函数抽象数据类型访问控制:接口与实现的分离C的struct+封装+访问控制=类(Class)思考:CStash和CStack中,哪些成员应该设置7、为私有的?哪些成员应该设置为公有的?例1:带访问控制的类StashclassStash{private:intsize;//Sizeofeachspaceintquantity;//Numberofstoragespacesintnext;//Nextemptyspaceunsignedchar*storage;voidinflate(intincrease);public:voidinitialize(in
5、类型说明structY{voidf(X*);};structX{//Definitionprivate:inti;public:voidinitialize();friendvoidg(X*,int);//全局函数友元friendstructZ;//类友元friendvoidY::f(X*);//成员函数友元friendvoidh();//全局函数友元};voidX::initialize(){i=0;//类X的初始化函数}voidg(X*x,inti){x->i=i;//访问X的私有成员i}voidY::f(X*x){x->i=47;//访问X的私有成员i}voidh(){Xx;x.i=1
6、00;//直接访问私有成员}intmain(){Xx;Zz;z.g(&x);}///:~structZ{private:intj;public:voidinitialize();voidg(X*x);};voidZ::initialize(){j=99;}voidZ::g(X*x){x->i+=j;}OOP的视点友员不是OOP的特征,破坏了封装性,这也是C++不是“纯”面向对象语言的原因之一。5.2.3从struct到class封装:数据成员+成员函数抽象数据类型访问控制:接口与实现的分离C的struct+封装+访问控制=类(Class)思考:CStash和CStack中,哪些成员应该设置
7、为私有的?哪些成员应该设置为公有的?例1:带访问控制的类StashclassStash{private:intsize;//Sizeofeachspaceintquantity;//Numberofstoragespacesintnext;//Nextemptyspaceunsignedchar*storage;voidinflate(intincrease);public:voidinitialize(in
此文档下载收益归作者所有