欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    数据的共享和保护学习教案.pptx

    • 资源ID:71937550       资源大小:396.21KB        全文页数:59页
    • 资源格式: PPTX        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    数据的共享和保护学习教案.pptx

    数据数据(shj)的共享和保护的共享和保护第一页,共59页。2 2函数原型中的参数,其作用函数原型中的参数,其作用域始于域始于(,结束于,结束于)。例如例如(lr),设有下列原型,设有下列原型声明:声明:double Area(double radius);radius 的作用域仅在于此,不能用于程序正文其它(qt)地方,因而可有可无。第1页/共59页第二页,共59页。3 3在函数体中声明的标识符,其作用域自声明处起,在函数体中声明的标识符,其作用域自声明处起,在函数体中声明的标识符,其作用域自声明处起,在函数体中声明的标识符,其作用域自声明处起,一直到声明所在一直到声明所在一直到声明所在一直到声明所在(su(su zi)zi)的块结束的大括号为止。的块结束的大括号为止。的块结束的大括号为止。的块结束的大括号为止。例如:例如:例如:例如:void fun(int a)void fun(int a)int b=a;int b=a;cinb;cinb;if(b0)if(b0)int c;int c;.c的作用域b的作用域a的作用域第2页/共59页第三页,共59页。4 4类作用域作用于特定的成员名。类作用域作用于特定的成员名。类作用域作用于特定的成员名。类作用域作用于特定的成员名。类类类类X X的成员的成员的成员的成员mm具有具有具有具有(jy(jy u)u)类作用域,对类作用域,对类作用域,对类作用域,对mm的的的的访问方式如下:访问方式如下:访问方式如下:访问方式如下:如果在如果在如果在如果在X X的成员函数中没有声明同名的局部作的成员函数中没有声明同名的局部作的成员函数中没有声明同名的局部作的成员函数中没有声明同名的局部作用域标识符,那么在该函数内可以访问成员用域标识符,那么在该函数内可以访问成员用域标识符,那么在该函数内可以访问成员用域标识符,那么在该函数内可以访问成员mm。通过表达式通过表达式通过表达式通过表达式x.mx.m或者或者或者或者X:mX:m访问。访问。访问。访问。通过表达式通过表达式通过表达式通过表达式prt-mprt-m。第3页/共59页第四页,共59页。5 5命名空间的语法命名空间的语法(yf):namespace 命名空间名命名空间名命名空间内的各种声明命名空间内的各种声明第4页/共59页第五页,共59页。6 6一个命名空间确定一个命名空间确定一个命名空间确定一个命名空间确定(qudng)(qudng)了一个命名空间作了一个命名空间作了一个命名空间作了一个命名空间作用域,凡是在该命名空间之内声明的、不属于前用域,凡是在该命名空间之内声明的、不属于前用域,凡是在该命名空间之内声明的、不属于前用域,凡是在该命名空间之内声明的、不属于前面所述各个作用域的标识符,都属于该命名空间面所述各个作用域的标识符,都属于该命名空间面所述各个作用域的标识符,都属于该命名空间面所述各个作用域的标识符,都属于该命名空间作用域。作用域。作用域。作用域。在命名空间内部可以直接使用当前命名空间中声明的标识符。如果需要使用其他命名空间的标识符,需要使用下面的语法:命名空间名:标识符名第5页/共59页第六页,共59页。7 7using using 语句:语句:语句:语句:using using 命名命名命名命名(mng mng)(mng mng)空间名空间名空间名空间名:标识符标识符标识符标识符using namespace using namespace 命名命名命名命名(mng mng)(mng mng)空间名空间名空间名空间名全局命名空间:是一个默认的命名空间,在显示声明的命名空间之外声明的标识符都在一个全局命名空间中。匿名命名空间第6页/共59页第七页,共59页。8 8#include#include using namespace std;using namespace std;int i;/int i;/在全局命名在全局命名在全局命名在全局命名(mng mng)(mng mng)空间中空间中空间中空间中的全局变量的全局变量的全局变量的全局变量namespace Nsnamespace Ns int j;/int j;/在命名在命名在命名在命名(mng mng)(mng mng)空间空间空间空间NsNs中的全局变量中的全局变量中的全局变量中的全局变量 第7页/共59页第八页,共59页。9 9int main()int main()i=5;/i=5;/为全局变量为全局变量为全局变量为全局变量i i赋值赋值赋值赋值Ns:j=6;/Ns:j=6;/为全局变量为全局变量为全局变量为全局变量j j赋值赋值赋值赋值 /一个块的开始一个块的开始一个块的开始一个块的开始(kish(kish)using namespace Ns;using namespace Ns;/在当前块中可以使用在当前块中可以使用在当前块中可以使用在当前块中可以使用NsNs命名空间中的标命名空间中的标命名空间中的标命名空间中的标识符识符识符识符int i;/int i;/局部变量局部变量局部变量局部变量i=7;/i=7;/给局部变量赋值给局部变量赋值给局部变量赋值给局部变量赋值couti=iendl;couti=iendl;coutj=jendl;coutj=jendl;couti=iendl;/couti=iendl;/输出全局变量输出全局变量输出全局变量输出全局变量i ireturn 0;return 0;第8页/共59页第九页,共59页。1010可见性是从对标识符的引用的可见性是从对标识符的引用的角度来谈的概念角度来谈的概念(ginin)可见性表示从内层作用域向外可见性表示从内层作用域向外层作用域层作用域“看看”时能看见什么。时能看见什么。如果标识在某处可见,则就可如果标识在某处可见,则就可以在该处引用此标识符。以在该处引用此标识符。局部作用域类作用域命名作用域第9页/共59页第十页,共59页。1111标识符应声明在先,引用在后。标识符应声明在先,引用在后。标识符应声明在先,引用在后。标识符应声明在先,引用在后。如果某个标识符在外层中声明,且在内层如果某个标识符在外层中声明,且在内层如果某个标识符在外层中声明,且在内层如果某个标识符在外层中声明,且在内层中没有同一标识符的声明,则该标识符在中没有同一标识符的声明,则该标识符在中没有同一标识符的声明,则该标识符在中没有同一标识符的声明,则该标识符在内层可见。内层可见。内层可见。内层可见。对于两个对于两个对于两个对于两个(lin)(lin)(lin)(lin)嵌套的作用域,如果嵌套的作用域,如果嵌套的作用域,如果嵌套的作用域,如果在内层作用域内声明了与外层作用域中同在内层作用域内声明了与外层作用域中同在内层作用域内声明了与外层作用域中同在内层作用域内声明了与外层作用域中同名的标识符,则外层作用域的标识符在内名的标识符,则外层作用域的标识符在内名的标识符,则外层作用域的标识符在内名的标识符,则外层作用域的标识符在内层不可见。层不可见。层不可见。层不可见。第10页/共59页第十一页,共59页。1212对象对象(duxing)从诞生到从诞生到结束的这段时间就是它的生结束的这段时间就是它的生存期。在对象存期。在对象(duxing)生生存期内,对象存期内,对象(duxing)将将保持它的值,直到被更新为保持它的值,直到被更新为止。止。第11页/共59页第十二页,共59页。1313静态生存期与程序的运行期静态生存期与程序的运行期相同。相同。在命名空间作用域中声明的在命名空间作用域中声明的对象具有对象具有(jyu)静态生存期。静态生存期。在函数内部声明静态生存期在函数内部声明静态生存期对象,则要使用关键字对象,则要使用关键字static。第12页/共59页第十三页,共59页。1414除上述两种情况,其余的对除上述两种情况,其余的对象都具有动态生存期。象都具有动态生存期。局部作用域中声明的,没有局部作用域中声明的,没有用用static修是的对象是动态修是的对象是动态生存期的对象(习惯生存期的对象(习惯(xgun)称局部生存期对象)称局部生存期对象)。局部生存期对象诞生于声明局部生存期对象诞生于声明点,结束于命名该标识符的点,结束于命名该标识符的作用域结束处。作用域结束处。第13页/共59页第十四页,共59页。1515#include#includeusing namespace std;using namespace std;int i=1;/i int i=1;/i 为全局变量,具有静态生存期。为全局变量,具有静态生存期。void other(void)void other(void)static int a=2;static int a=2;static int b;static int b;/a,b /a,b为静态局部为静态局部(jb)(jb)变量,具有全局寿命,局部变量,具有全局寿命,局部(jb)(jb)可见。可见。/只第一次进入函数时被初始化。只第一次进入函数时被初始化。int c=10;/C int c=10;/C为局部为局部(jb)(jb)变量,具有动态生存期,变量,具有动态生存期,/每次进入函数时都初始化。每次进入函数时都初始化。a=a+2;i=i+32;c=c+5;a=a+2;i=i+32;c=c+5;cout-OTHER-n;cout-OTHER-n;cout i:i a:a b:b c:cendl;cout i:i a:a b:b c:cendl;b=a;b=a;第14页/共59页第十五页,共59页。1616int main()int main()static int a;/static int a;/静态局部变量,有全局静态局部变量,有全局(qunj)(qunj)寿命,局部寿命,局部可见。可见。int b=-10;/b,c int b=-10;/b,c为局部变量,具有动态生存期。为局部变量,具有动态生存期。int c=0;int c=0;cout-MAIN-n;cout-MAIN-n;cout i:i a:a b:b c:cendl;cout i:i a:a b:b c:cendl;c=c+8;c=c+8;other();other();cout-MAIN-n;cout-MAIN-n;cout i:i a:a b:b c:cendl;cout i:i a:a b:b c:cendl;i=i+10;i=i+10;other();other();return 0;return 0;第15页/共59页第十六页,共59页。运行(ynxng)结果:18第16页/共59页第十七页,共59页。1818#include#includeusing namespace std;using namespace std;class Clockclass Clock/时钟类声明时钟类声明public:public:/外部接口外部接口(ji k(ji k u)u)Clock();Clock();void setTime(int newH,int newM,int newS);void setTime(int newH,int newM,int newS);/三个形参均具有函数原型作用域三个形参均具有函数原型作用域void showTime();void showTime();Clock()Clock()private:private:/私有数据成员私有数据成员int hour,minute,second;int hour,minute,second;第17页/共59页第十八页,共59页。/时钟类成员函数时钟类成员函数(hnsh)(hnsh)实现实现Clock/Clock/时钟类成员函数时钟类成员函数(hnsh)(hnsh)实现实现Clock:Clock()Clock:Clock()/构造函数构造函数(hnsh)(hnsh)hour=0;hour=0;minute=0;minute=0;second=0;second=0;void Clock:setTime(int newH,int newM,int newS)void Clock:setTime(int newH,int newM,int newS)hour=newH;hour=newH;minute=newM;minute=newM;second=newS;second=newS;void Clock:showTime()void Clock:showTime()couthour:minute:secondendl;couthour:minute:secondendl;1919第18页/共59页第十九页,共59页。Clock globClock;Clock globClock;/声明对象声明对象globClockglobClock,/具有静态生存期,命名空间作用域具有静态生存期,命名空间作用域int main()int main()/主函数主函数 coutFirst time output:endl;coutFirst time output:endl;/引用具有文件作用域的对象:引用具有文件作用域的对象:globClock.showTime();/globClock.showTime();/对象的成员对象的成员(chngyun)(chngyun)函数函数具有类作用域具有类作用域globClock.setTime(8,30,30);globClock.setTime(8,30,30);Clock myClock(globClock);Clock myClock(globClock);/定义具有局部作用域的对象定义具有局部作用域的对象myClockmyClockcoutSecond time output:endl;coutSecond time output:endl;myClock.showTime();myClock.showTime();/引用具有局部作用域的对象引用具有局部作用域的对象return 0;return 0;21第19页/共59页第二十页,共59页。程序的运行(ynxng)结果为:First time output:0:0:0Second time output:8:30:3022第20页/共59页第二十一页,共59页。2222静态成员的提出时为了解决静态成员的提出时为了解决数据共享的问题。数据共享的问题。在类中,静态成员分为在类中,静态成员分为(fn(fn wi)wi)静态数据成员和静态成静态数据成员和静态成员函数。员函数。第21页/共59页第二十二页,共59页。2323静态数据成员是类的所有对象共享的成员,静态数据成员是类的所有对象共享的成员,静态数据成员是类的所有对象共享的成员,静态数据成员是类的所有对象共享的成员,而不是某个对象的成员。静态数据成员的值而不是某个对象的成员。静态数据成员的值而不是某个对象的成员。静态数据成员的值而不是某个对象的成员。静态数据成员的值对所有对象来说都是一样的,但它的值是可对所有对象来说都是一样的,但它的值是可对所有对象来说都是一样的,但它的值是可对所有对象来说都是一样的,但它的值是可以以以以(ky)(ky)(ky)(ky)更新的。更新的。更新的。更新的。考虑这样一个问题:考虑这样一个问题:如何记录一个类在程序运行时有多少如何记录一个类在程序运行时有多少个对象被创建?个对象被创建?为了记录这个类的对象的个数,需要有为了记录这个类的对象的个数,需要有一个变量来存储表示有多少对象被创建的计数值。一个变量来存储表示有多少对象被创建的计数值。第22页/共59页第二十三页,共59页。2424#include#include using namespace std;using namespace std;class Pointclass Point public:public:Point(int x=0,int y=0):x(x),y(y)Point(int x=0,int y=0):x(x),y(y)count+;count+;Point(Point&p);Point(Point&p);Point()count-;Point()count-;int getX()return x;int getX()return x;int getY()return y;int getY()return y;void showCount()void showCount()cout Object count=countendl;cout Object count=countendl;private:private:int x,y;int x,y;static int count;static int count;第23页/共59页第二十四页,共59页。Point:Point(Point&p)Point:Point(Point&p)x=p.x;x=p.x;y=p.y;y=p.y;count+;count+;int Point:count=0;int Point:count=0;int main()int main()Point a(4,5);Point a(4,5);coutPoint A,a.getX(),a.getY();coutPoint A,a.getX(),a.getY();a.showCount();a.showCount();Point b(a);Point b(a);coutPoint B,b.getX(),b.getY();coutPoint B,b.getX(),静态成员名6、如果是private或者protected静态数据成员,则不能在类外直接访问,只能通过公用的成员函数访问。第26页/共59页第二十七页,共59页。类中静态成员(chngyun)函数的定义格式:class 类名(li mn)static 类型 函数名(形参)函数体 ;第27页/共59页第二十八页,共59页。类的静态(jngti)成员函数的调用:静态成员函数属于类,由同一个类的所有对象共享。所以,访问静态成员函数时不需要类的对象。类名:静态成员函数名(实参表)对象名.静态成员函数名(实参表)在类的外部不能调用(dioyng)类中在protected和private部分说明的静态成员函数。第28页/共59页第二十九页,共59页。3030#include#include using namespace std;using namespace std;class Pointclass Point public:public:Point(int x=0,int y=0):x(x),y(y)Point(int x=0,int y=0):x(x),y(y)count+;count+;Point(Point&p);Point(Point&p);Point()count-;Point()count-;int getX()return x;int getX()return x;int getY()return y;int getY()return y;static void showCount();static void showCount();private:private:int x,y;int x,y;static int count;static int count;第29页/共59页第三十页,共59页。Point:Point(Point&p)Point:Point(Point&p)x=p.x;x=p.x;y=p.y;y=p.y;count+;count+;void Point:showCount()void Point:showCount()cout Object count=countendl;cout Object count=countendl;int Point:count=0;int Point:count=0;32第30页/共59页第三十一页,共59页。int main()int main()Point a(4,5);Point a(4,5);coutPoint A,a.getX(),a.getY();coutPoint A,a.getX(),a.getY();Point:showCount();Point:showCount();Point b(a);Point b(a);coutPoint B,b.getX(),b.getY();coutPoint B,b.getX(),b.getY();Point:showCount();Point:showCount();return 0;return 0;32第31页/共59页第三十二页,共59页。3333静态数据成员静态数据成员用关键字用关键字static声明声明(shngmng)该类的所有对象维护该成员该类的所有对象维护该成员的同一个拷贝的同一个拷贝必须在类外定义和初始化,必须在类外定义和初始化,用用(:)来指明所属的类。来指明所属的类。静态成员函数静态成员函数类外代码可以使用类名和作类外代码可以使用类名和作用域操作符来调用静态成员用域操作符来调用静态成员函数。函数。静态成员函数只能引用属于静态成员函数只能引用属于该类的静态数据成员或静态该类的静态数据成员或静态成员函数。成员函数。第32页/共59页第三十三页,共59页。3434友元是友元是C+提供的一种破坏提供的一种破坏数据封装和数据隐藏的机制。数据封装和数据隐藏的机制。C+提供了一种允许外部类提供了一种允许外部类和外部函数存取类的私有成和外部函数存取类的私有成员员(chngyun)和保护成员和保护成员(chngyun)的辅助方法,的辅助方法,即将它们声明为一个给定类即将它们声明为一个给定类的友元,使其具有类成员的友元,使其具有类成员(chngyun)函数的访问权函数的访问权限。限。可以使用友元函数和友元类。可以使用友元函数和友元类。为了确保数据的完整性,及为了确保数据的完整性,及数据封装与隐藏的原则,建数据封装与隐藏的原则,建议尽量不使用或少使用友元。议尽量不使用或少使用友元。第33页/共59页第三十四页,共59页。3535友元函数是在类声明中由关键字友元函数是在类声明中由关键字友元函数是在类声明中由关键字友元函数是在类声明中由关键字friendfriend修饰说修饰说修饰说修饰说明的非成员函数,在它的函数体中能够明的非成员函数,在它的函数体中能够明的非成员函数,在它的函数体中能够明的非成员函数,在它的函数体中能够(nnggu)(nnggu)通过对象名访问通过对象名访问通过对象名访问通过对象名访问 private private 和和和和 protectedprotected成员成员成员成员作用:增加灵活性,使程序员可以在封装和快作用:增加灵活性,使程序员可以在封装和快作用:增加灵活性,使程序员可以在封装和快作用:增加灵活性,使程序员可以在封装和快速性方面做合理选择。速性方面做合理选择。速性方面做合理选择。速性方面做合理选择。访问对象中的成员必须通过对象名。访问对象中的成员必须通过对象名。访问对象中的成员必须通过对象名。访问对象中的成员必须通过对象名。友元函数可以是一个普通的函数,也可以是另友元函数可以是一个普通的函数,也可以是另友元函数可以是一个普通的函数,也可以是另友元函数可以是一个普通的函数,也可以是另外一个类的成员函数。友元成员函数的使用和外一个类的成员函数。友元成员函数的使用和外一个类的成员函数。友元成员函数的使用和外一个类的成员函数。友元成员函数的使用和一般友元函数的使用相同,只是要通过相应的一般友元函数的使用相同,只是要通过相应的一般友元函数的使用相同,只是要通过相应的一般友元函数的使用相同,只是要通过相应的类或对象名来访问。类或对象名来访问。类或对象名来访问。类或对象名来访问。第34页/共59页第三十五页,共59页。3636#include#include#include#include using namespace std;using namespace std;class Pointclass Point/Point/Point类声明类声明(shngmng)(shngmng)public:public:/外部接口外部接口Point(int x=0,int y=0):x(x),y(y)Point(int x=0,int y=0):x(x),y(y)int getX()return x;int getX()return x;int getY()return y;int getY()return y;friend float dist(Point&p1,Point&p2);friend float dist(Point&p1,Point&p2);private:private:/私有数据成员私有数据成员int x,y;int x,y;第35页/共59页第三十六页,共59页。float dist(Point&p1,Point&p2)float dist(Point&p1,Point&p2)float x=p1.x-p2.x;float x=p1.x-p2.x;float y=p1.y-p2.y;float y=p1.y-p2.y;return sqrt(x*x+y*y);return sqrt(x*x+y*y);int main()int main()Point myp1(1,1),myp2(4,5);Point myp1(1,1),myp2(4,5);coutThe distance is:;coutThe distance is:;coutdist(myp1,myp2)endl;coutdist(myp1,myp2)endl;return 0;return 0;3737第36页/共59页第三十七页,共59页。3838若一个类为另一个类的友元,若一个类为另一个类的友元,则此类的所有成员都能访问则此类的所有成员都能访问对方对方(dufng)类的私有成员。类的私有成员。声明语法:将友元类名在另声明语法:将友元类名在另一个类中使用一个类中使用friend修饰说修饰说明。明。class 类名B /类B中的其他(qt)成员 friend class A;/类B中的其他(qt)成员;第37页/共59页第三十八页,共59页。3939class Aclass A public:public:void display()coutxendl;void display()coutxendl;int getX(return x;int getX(return x;friend class B friend class B;private:private:int x;int x;第38页/共59页第三十九页,共59页。4040class Bclass B public:public:void set(int i);void set(int i);void display();void display();private:private:A A a;a;void B:set(int i)a.x=i;第39页/共59页第四十页,共59页。41412 2、友元关系、友元关系、友元关系、友元关系(gun x)(gun x)是是是是单向的单向的单向的单向的如果声明如果声明如果声明如果声明B B类是类是类是类是A A类的友元,类的友元,类的友元,类的友元,B B类的成员函数类的成员函数类的成员函数类的成员函数(hnsh)(hnsh)就可以访问就可以访问就可以访问就可以访问A A类的私有和保护数据,但类的私有和保护数据,但类的私有和保护数据,但类的私有和保护数据,但A A类的成员类的成员类的成员类的成员函数函数函数函数(hnsh)(hnsh)却不能访问却不能访问却不能访问却不能访问B B类的私有、类的私有、类的私有、类的私有、保护数据。保护数据。保护数据。保护数据。1、友元关系(gun x)是不能传递的3、友元关系是不能被继承的第40页/共59页第四十一页,共59页。4242 对于既需要共享又需要防止改变的数据应该声明为对于既需要共享又需要防止改变的数据应该声明为对于既需要共享又需要防止改变的数据应该声明为对于既需要共享又需要防止改变的数据应该声明为常量。常量。常量。常量。常对象常对象常对象常对象常成员函数和常数据成员常成员函数和常数据成员常成员函数和常数据成员常成员函数和常数据成员常引用常引用常引用常引用常数组常数组常数组常数组 指向常量的指针指向常量的指针指向常量的指针指向常量的指针(zh(zh zhn)(zhn)(下一章介绍下一章介绍下一章介绍下一章介绍)。常指针常指针常指针常指针(zh(zh zhn)zhn)指向常量的指针指向常量的指针指向常量的指针指向常量的指针(zh(zh zhn)(zhn)(下一章介下一章介下一章介下一章介绍绍绍绍)。共享数据(shj)的保护第41页/共59页第四十二页,共59页。4343必须必须必须必须(bx)(bx)进行初始化进行初始化进行初始化进行初始化,不能被更新。不能被更新。不能被更新。不能被更新。const const 类名类名类名类名 对象名对象名对象名对象名类名类名类名类名 const const 对象名对象名对象名对象名 共享数据(shj)的保护class A public:A(int i,int j):x(i),y(j).private:int x,y;const A a(3,4);/a是常对象,不能被更新第42页/共59页第四十三页,共59页。4444l l使用使用const关键字说明的函数。关键字说明的函数。l l常成员常成员(chngyun)函数不更新对函数不更新对象的数据成员象的数据成员(chngyun)。l l常成员常成员(chngyun)函数说明格式:函数说明格式:类型说明符类型说明符 函数名(参数表)函数名(参数表)const;const是函数类型的一个组成部是函数类型的一个组成部分,因此在实现部分也要带分,因此在实现部分也要带const关键字。关键字。l lconst关键字可以被用于参与对重关键字可以被用于参与对重载函数的区分载函数的区分l l通过常对象只能调用它的常成员通过常对象只能调用它的常成员(chngyun)函数,而不能调用其函数,而不能调用其他的成员他的成员(chngyun)函数。函数。共享数据(shj)的保护第43页/共59页第四十四页,共59页。4545#include#include using namespace std;using namespace std;class Rclass R public:public:R(int r1,int r2):r1(r1),r2(r2)R(int r1,int r2):r1(r1),r2(r2)void print();void print();void print()const;void print()const;private:private:int r1,r2;int r1,r2;共享数据(shj)的保护第44页/共59页第四十五页,共59页。void R:print()void R:print()coutr1:r2endl;coutr1:r2endl;void R:print()constvoid R:print()const coutr1;r2endl;coutr1;r2endl;int main()int main()R a(5,4);R a(5,4);a.print();/a.print();/调用调用调用调用(dioyng)void print()(dioyng)void print()const R b(20,52);const R b(20,52);b.print();/b.print();/调用调用调用调用(dioyng)void print()(dioyng)void print()constconstreturn 0;return 0;46第45页/共59页第四十六页,共59页。4747 共享数据(shj)的保护l使用const说明的数据成员(chngyun),就是常数据成员(chngyun)。l如果一个类中说明了常数据成员,则任何函数都不能对该成员赋值。l通过构造函数对该数据成员进行初始化,只能通过初始化列表。第46页/共59页第四十七页,共59页。4848#include#includeusing namespace std;using namespace std;class Aclass A public:public:A(int i);A(int i);void print();void print();private:private:const int a;/const int a;/常数据成员常数据成员常数据成员常数据成员(chngyun)(chngyun)static const int b;/static const int b;/静态常数据成员静态常数据成员静态常数据成员静态常数据成员(chngyun)(chngyun);共享数据(shj)的保护第47页/共59页第四十八页,共59页。/静态常数据成员在类外进行定义和初始化静态常数据成员在类外进行定义和初始化静态常数据成员在类外进行定义和初始化静态常数据成员在类外进行定义和初始化const int A:b=10;const int A:b=10;/常数据成员只能通过初始化列表来获得初值常数据成员只能通过初始化列表来获得初值常数据成员只能通过初始化列表来获得初值常数据成员只能通过初始化列表来获得初值A:A(int i):a(i)A:A(int i):a(i)void A:print()void A:print()couta:bendl;couta:bendl;int main()int main()/*/*建立建立建立建立(jinl)(jinl)对象对象对象对象a a和和和和b b,并以,并以,并以,并以100100和和和和0 0作为初值,分别调用构造作为初值,分别调用构造作为初值,分别调用构造作为初值,分别调用构造函数,通过构造函数的初始化列表给对象的常数据成员赋初值函数,通过构造函数的初始化列表给对象的常数据成员赋初值函数,通过构造函数的初始化列表给对象的常数据成员赋初值函数,通过构造函数的初始化列表给对象的常数据成员赋初值*/*/A a1(100),a2(0);A a1(100),a2(0);a1.print();a1.print();a2.print();a2.print();return 0;return 0;48第48页/共59页第四十九页,共59页。5050 共享数据(shj)的保护l如果(rgu)在声明引用时,用const修饰,则被声明的引用就是常引用。l常引用所引用的对象不能被更新。l用常引用做函数形参,就不会意外地发生对实参的修改。l常引用的声明如下:const 类型说明符&引用名第49页/共59页第五十页,共59页。5151#include#include#include#include/#include/#include/using namespace std;/using namespace std;class Pointclass Point/Point/Point类声明类声明类声明类声明 public:public:/外部接口外部接口外部接口外部接口Point(int x=0,int y=0):x(x),y(y)Point(int x=0,int y=0):x(x),y(y)int getX()return x;int getX()return x;int getY()return y;int getY()return y;friend float dist(const Point&p1,const Point&p2);friend float dist(const Point&p1,const Point&p2);private:priva

    注意事项

    本文(数据的共享和保护学习教案.pptx)为本站会员(一***)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

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

    收起
    展开