欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    《类和对象一》PPT课件.ppt

    • 资源ID:5565920       资源大小:1.55MB        全文页数:172页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

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

    《类和对象一》PPT课件.ppt

    类和对象-1,崔克彬,目录,5.1 类的定义 5.2 对象的定义 5.3 对象的初始化 5.4 成员函数的特性 5.5 静态成员 5.6 友元 5.7 类的作用域 5.8 局部类和嵌套类(自学)5.9 对象的生存周期,5.1 类的定义,类的定义:类是一种复杂的数据类型,它是将不同的类型的数据和与这些数据相关的操作封装在一起的集合体。类是面向对象程序设计的核心;类是一种用户自定义类型,是一种通过抽象数据类型的方法由用户构造的新型的数据类型;类的结构由其内部数据结构和相关的操作决定,并通过操作接口来描述,操作接口又被称为这类对象向其他对象提供的服务。,5.1 类的定义,类的定义格式:class public:private:;,5.1 类的定义,类的定义格式:说明:类的成员分为数据成员和成员函数类的成员的访问权限分三类:公有的(public)、私有的(private)和保护的(protected);public、private和protected被称为访问权限修饰符/访问控制修饰符,说明类或成员的访问权限:公有成员不仅可以被类的成员函数引用,而且可以在程序中被引用=公有成员提供了类的接口功能 私有成员只能被类的成员或友元函数所引用,在程序中不可访问,5.1 类的定义,类的定义格式:说明:类的成员函数可以在类体内定义,也可以在类体外定义。当成员函数在类体外定义时,需定义为以下格式::():作用域运算符,用来标识该成员函数属于哪个类。,5.1 类的定义,例5.1:定义一个关于日期的类,类的说明部分:class TDate public:void SetDate(int y,int m,int d);int IsLeapYear();void Print();private:int year,month,day;,类中定义了6个类成员:3个成员函数,3个数据成员,;,5.1 类的定义,例5.1:定义一个关于日期的类,成员函数如果定义在类体外,需要在函数头前加上函数所属的类的标识符,使用作用域运算符:,类的实现部分,类的公有成员可访问类的私有成员,5.1 类的定义,例5.1:定义一个关于日期的类,成员函数如果定义在类体内,则与一般函数的定义一样,类的另一种实现方式,;,5.1 类的定义,注意事项:在类体内不允许对所定义的数据成员进行初始化操作,类的数据成员的类型可以是普通的数据类型:整型、浮点型、字符型、数组、指针和引用等,也可以为对象另一个类的对象可以作为该类的成员,该类的指针或引用也可以作为该类的成员,但该类自身的对象不可以作为该类的成员,5.1 类的定义,注意事项:,5.1 类的定义,注意事项:,5.1 类的定义,注意事项:通常将对于类的说明部分或整个类的定义部分放到一个单独的头文件中:例如,可将之前定义的TDate类放到名为tdate.h的头文件中,目录,5.1 类的定义 5.2 对象的定义 5.3 对象的初始化 5.4 成员函数的特性 5.5 静态成员 5.6 友元 5.7 类的作用域 5.8 局部类和嵌套类(自学)5.9 对象的生存周期,5.2 对象的定义,对象是类的实例,类是某一类对象的抽象 对象属于某个已知类,定义对象之前要先定义该对象的类,例:TDate date1,date2,*Pdate,date31;,对象的定义格式:,5.2 对象的定义,对象成员(数据成员/成员函数)的表示方法:一般对象:()例:TDate date1;date1.year,date1.month,date1.day date1.SetDate(y,m,d),5.2 对象的定义,对象成员(数据成员/成员函数)的表示方法:指向对象的指针:方式:()例:TDate Pdate;Pdateyear,Pdatemonth,Pdateday PdateSetDate(y,m,d)方式:()()()例:TDate*Pdate;(Pdate)year,(Pdate)month,(Pdate)day(Pdate)SetDate(y,m,d),5.2 对象的定义,对象成员(数据成员/成员函数)的表示方法:对象引用:()例:TDate date1,rdate.year,rdate.month,rdate.day rdate.SetDate(y,m,d)说明:同一个类创建的不同对象,其数据结构相同系统为其分配相同长度的内存单元。但其内容有可能不同;同一个类创建的不同对象,共享类中的成员函数=系统只为所定义的对象提供数据成员的内存空间,5.2 对象的定义,例5.1:分析程序的输出结果,5.2 对象的定义,例5.1:分析程序的输出结果,/系统只为所定义的对象提供数据成员的内存空间,5.2 对象的定义,例5.1:分析程序的输出结果,/系统只为所定义的对象提供数据成员的内存空间,/对象调用类的成员函数,1996,5,4,5.2 对象的定义,例5.1:分析程序的输出结果,/系统只为所定义的对象提供数据成员的内存空间,/对象调用类的成员函数,1996,5,4,1998,4,9,5.2 对象的定义,例5.1:分析程序的输出结果,/系统只为所定义的对象提供数据成员的内存空间,/对象调用类的成员函数,1996,5,4,1998,4,9,int leap,date1.year,1,5.2 对象的定义,例5.1:分析程序的输出结果,/系统只为所定义的对象提供数据成员的内存空间,/对象调用类的成员函数,1996,5,4,1998,4,9,int leap,1,5.2 对象的定义,例5.1:分析程序的输出结果,/系统只为所定义的对象提供数据成员的内存空间,/对象调用类的成员函数,1996,5,4,1998,4,9,int leap,1,5.2 对象的定义,例5.1:分析程序的输出结果,/系统只为所定义的对象提供数据成员的内存空间,/对象调用类的成员函数,结论?,1、在程序中,可以访问类的公有成员2、类的成员函数只能通过该类定义的对象来调用,5.2 对象的定义,例5.1:分析程序的输出结果,/系统只为所定义的对象提供数据成员的内存空间,/对象调用类的成员函数,问题?,5.2 对象的定义,例5.1:分析程序的输出结果,/系统只为所定义的对象提供数据成员的内存空间,/对象调用类的成员函数,结论?,类的私有成员不能被程序所访问,只能被类的成员函数所访问,5.2 对象的定义,例5.2:分析程序的输出结果,5.2 对象的定义,例5.2:分析程序的输出结果,数据成员,5.2 对象的定义,例5.2:分析程序的输出结果,3,5,5.2 对象的定义,例5.2:分析程序的输出结果,3,5,8,10,5.2 对象的定义,例5.2:分析程序的输出结果,3,5,8,10,5,6,5.2 对象的定义,例5.2:分析程序的输出结果,3,5,8,10,5,6,9,8,5.2 对象的定义,例5.2:分析程序的输出结果,3,5,8,10,5,6,9,8,5.2 对象的定义,例5.2:分析程序的输出结果,3,5,8,10,5,6,9,8,目录,5.1 类的定义 5.2 对象的定义 5.3 对象的初始化 5.4 成员函数的特性 5.5 静态成员 5.6 友元 5.7 类的作用域 5.8 局部类和嵌套类(自学)5.9 对象的生存周期,5.3 对象的初始化,5.3.1 构造函数和析构函数 5.3.2 缺省构造函数和缺省析构函数 5.3.3 拷贝初始化构造函数,5.3 对象的初始化,回顾:TDate类与TPoint类初始化对象的方式,5.3 对象的初始化,回顾:TDate类与TPoint类初始化对象的方式,5.3 对象的初始化,总结:对对象进行初始化,实际就是对对象的数据成员(属性)进行初始化操作;类中都定义了一类函数实现对对象的初始化操作即为对象的数据成员赋初始值(例如TDate:SetDate(int y,int m,int d)函数,TPoint:SetPoint(int x,int y)函数)。,类中是否有一类函数专门实现对对象的初始化?这类函数是否有特定的语法规则?,5.3 对象的初始化,在创建对象时对对象进行初始化操作的类的成员函数称为构造函数 在对象删除时对对象进行释放操作的类的成员函数称为析构函数,构造函数和析构函数,以日期类TDate类为例,构造该类的构造函数和析构函数,5.3 对象的初始化,构造函数的特点:构造函数是类的成员函数,可以定义在类体内,也可以定义在类体外;构造函数的函数名必须与类名相同;构造函数的返回值类型不指定说明,具有隐含的函数返回值,该值由系统内部使用;,TDate类的构造函数:函数名为TDate,TDate类的构造函数:TDate函数不指明返回值类型,构造函数和析构函数,5.3 对象的初始化,构造函数的特点:构造函数可以有一个参数,也可以有多个参数;,构造函数的作用是对类的数据成员进行初始化操作,所以定义TDate类的构造函数如下:class TDate public:TDate(int y,int m,int d)year=y;month=m;day=d;private:int year,month,day;,构造函数和析构函数,5.3 对象的初始化,构造函数的特点:构造函数可以重载,即同一个类中可以定义多个参数不同的构造函数;程序中不能直接调用构造函数,在创建对象时系统自动调用构造函数。,void main()TDate date1(2000,3,10);,TDate(int y,int m,int d)year=y;month=m;day=d;,/对对象进行初始化操作,系统自动调用类的构造函数,构造函数和析构函数,5.3 对象的初始化,析构函数的特点:析构函数是类的成员函数,可以定义在类体内,也可以定义在类体外;析构函数的函数名与类名相同,前面加字符用来与构造函数进行区别;析构函数不指定函数的返回值类型,也没有参数;析构函数不可以重载,即一个类中只能定义一个析构函数;,构造函数和析构函数,TDate类的析构函数:函数名为TDate,TDate类的析构函数:定义为TDate();,5.3 对象的初始化,析构函数的特点:析构函数可以被程序调用,也可以由系统调用自动。在下面两种情况下,析构函数会被系统自动调用:如果一个对象被定义在函数体内,则当函数结束时,该对象的析构函数会被自动调用;如果一个对象是用new运算符被动态创建的,则在使用delete运算符释放它时,delete将会自动调用析构函数。,构造函数和析构函数,void main()TDate date1(2000,3,10);,系统自动调用类的析构函数,TDate(),5.3 对象的初始化,重新定义日期TDate类(保存在tdate.h中),5.3 对象的初始化,例5.3:分析程序的输出结果,系统自动调用类的构造函数,ty.year=1998,ty.month=4,ty.day=9,输出:Constructor called.,输出:Constructor called.,5.3 对象的初始化,例5.3:分析程序的输出结果,系统自动调用类的构造函数,ty.year=1998,ty.month=4,ty.day=9,tm.year=1998,tm.month=4,tm.day=10,输出:Constructor called.Constructor called.,输出:Constructor called.Constructor called.,5.3 对象的初始化,例5.3:分析程序的输出结果,对象调用类的成员函数,ty.year=1998,ty.month=4,ty.day=9,tm.year=1998,tm.month=4,tm.day=10,today.year,today.month,today.day,输出:Constructor called.Constructor called.,5.3 对象的初始化,例5.3:分析程序的输出结果,ty.year=1998,ty.month=4,ty.day=9,tm.year=1998,tm.month=4,tm.day=10,tomor.year,tomor.month,tomor.day,输出:Constructor called.Constructor called.,输出:Constructor called.Constructor called.,5.3 对象的初始化,例5.3:分析程序的输出结果,ty.year=1998,ty.month=4,ty.day=9,tm.year=1998,tm.month=4,tm.day=10,输出:Constructor called.Constructor called.Destructor called.,系统自动调用类的析构函数,输出:Constructor called.Constructor called.,5.3 对象的初始化,例5.3:分析程序的输出结果,ty.year=1998,ty.month=4,ty.day=9,tm.year=1998,tm.month=4,tm.day=10,输出:Constructor called.Constructor called.Destructor called.,系统自动调用类的析构函数,输出:Constructor called.Constructor called.Destructor called.Destructor called.,5.3 对象的初始化,5.3.1 构造函数和析构函数 5.3.2 缺省构造函数和缺省析构函数 5.3.3 拷贝初始化构造函数,5.3 对象的初始化,缺省构造函数:在定义类时没有定义任何构造函数,则编译器自动生成一个不带参数的缺省构造函数::()缺省析构函数:在定义类时没有定义任何析构函数,则编译器自动生成一个不带参数的缺省析构函数::(),缺省构造函数和缺省析构函数,说明:用缺省构造函数对对象初始化时,对 象的所有数据成员都初始化为零或空,说明:缺省析构函数是空函数,5.3 对象的初始化,5.3.1 构造函数和析构函数 5.3.2 缺省构造函数和缺省析构函数 5.3.3 拷贝初始化构造函数,5.3 对象的初始化,当用一个已知的对象来初始化同类的另一个被创建的对象时,可调用拷贝初始化构造函数。格式::(const&),拷贝初始化构造函数,5.3 对象的初始化,当用一个已知的对象来初始化同类的另一个被创建的对象时,可调用拷贝初始化构造函数。格式::(const&),拷贝初始化构造函数,例,定义TDate类的拷贝初始化构造函数:TDate(const TDate,拷贝初始化构造函数也是构造函数,它将一个已知对象的数据成员的值拷贝给创建的同类的另一个对象;该函数只有一个参数,是对同类进行赋值的对象的引用;每个类都需有一个拷贝初始化构造函数;如果类中没有说明,则编译系统自动生成一个缺省的拷贝初始化构造函数,作为该类的公有成员。,5.3 对象的初始化,例5.4:重新定义点类TPoint(存到tpoint1.h中),5.3 对象的初始化,例5.5:分析程序输出结果,5.3 对象的初始化,例5.5:分析程序输出结果,输出:Copy_initialization Constructor called.,5.3 对象的初始化,例5.5:分析程序输出结果,输出:Copy_initialization Constructor called.,输出:Copy_initialization Constructor called.P2=5,7,5.3 对象的初始化,例5.5:分析程序输出结果,输出:Copy_initialization Constructor called.P2=5,7,输出:Copy_initialization Constructor called.P2=5,7Destructor called.,5.3 对象的初始化,例5.5:分析程序输出结果,输出:Copy_initialization Constructor called.P2=5,7Destructor called.,输出:Copy_initialization Constructor called.P2=5,7Destructor called.Destructor called.,5.3 对象的初始化,例5.5:分析程序输出结果,5.3 对象的初始化,例5.5:分析程序输出结果,输出:Copy_initialzation Constrctor called.,5.3 对象的初始化,例5.5:分析程序输出结果,输出:Copy_initialzation Constrctor called.,5.3 对象的初始化,例5.5:分析程序输出结果,输出:Copy_initialzation Constrctor called.,输出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.,5.3 对象的初始化,例5.5:分析程序输出结果,输出:Copy_initialzation Constrctor called.,输出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.,输出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.Ok,5.3 对象的初始化,例5.5:分析程序输出结果,输出:Copy_initialzation Constrctor called.,输出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.,输出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.Ok,5.3 对象的初始化,例5.5:分析程序输出结果,输出:Copy_initialzation Constrctor called.,输出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.,输出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.ok,x=30,5.3 对象的初始化,例5.5:分析程序输出结果,输出:Copy_initialzation Constrctor called.,输出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.,输出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.ok,x=30,y=55,5.3 对象的初始化,例5.5:分析程序输出结果,输出:Copy_initialzation Constrctor called.,输出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.,输出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.ok,x=30,y=55,5.3 对象的初始化,例5.5:分析程序输出结果,输出:Copy_initialzation Constrctor called.,输出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.,输出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.ok,x=30,y=55,由于不能返回main主函数,所以将R的值暂时赋给一个匿名对象。需要调用拷贝初始化构造函数,5.3 对象的初始化,例5.5:分析程序输出结果,输出:Copy_initialzation Constrctor called.,输出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.,输出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.ok,x=30,y=55,输出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.okCopy_initialzation Constrctor called.,5.3 对象的初始化,例5.5:分析程序输出结果,x=30,y=55,输出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.okCopy_initialzation Constrctor called.,输出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.okCopy_initialzation Constrctor called.Destructor called.Destructor called.,调用两次,分别释放对象R和对象Q,5.3 对象的初始化,例5.5:分析程序输出结果,x=30,y=55,输出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.okCopy_initialzation Constrctor called.Destructor called.Destructor called.,5.3 对象的初始化,例5.5:分析程序输出结果,x=30,y=55,输出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.okCopy_initialzation Constrctor called.Destructor called.Destructor called.,5.3 对象的初始化,例5.5:分析程序输出结果,x=30,y=55,输出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.okCopy_initialzation Constrctor called.Destructor called.Destructor called.,调用一次,释放匿名对象A,赋值结束,需要释放匿名对象A,5.3 对象的初始化,例5.5:分析程序输出结果,x=30,y=55,输出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.okCopy_initialzation Constrctor called.Destructor called.Destructor called.,输出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.okCopy_initialzation Constrctor called.Destructor called.Destructor called.Destructor called.,输出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.okCopy_initialzation Constrctor called.Destructor called.Destructor called.Destructor called.,5.3 对象的初始化,例5.5:分析程序输出结果,5.3 对象的初始化,例5.5:分析程序输出结果,输出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.okCopy_initialzation Constrctor called.Destructor called.Destructor called.Destructor called.,输出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.okCopy_initialzation Constrctor called.Destructor called.Destructor called.Destructor called.P=30,55,5.3 对象的初始化,例5.5:分析程序输出结果,输出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.okCopy_initialzation Constrctor called.Destructor called.Destructor called.Destructor called.,输出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.okCopy_initialzation Constrctor called.Destructor called.Destructor called.Destructor called.P=30,55,调用三次,分别释放对象N、对象P和对象M,5.3 对象的初始化,例5.5:分析程序输出结果,输出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.okCopy_initialzation Constrctor called.Destructor called.Destructor called.Destructor called.,输出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.okCopy_initialzation Constrctor called.Destructor called.Destructor called.Destructor called.P=30,55,输出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.okCopy_initialzation Constrctor called.Destructor called.Destructor called.Destructor called.P=30,55Destructor called.Destructor called.Destructor called.,5.3 对象的初始化,拷贝初始化构造函数,拷贝初始化构造函数的功能就是用一个已知的对象来初始化另一个对象;调用拷贝初始化构造函数的三种情况:明确表示由一个对象初始化另一个对象时:例:TPoint P2(P1);当对象作为函数参数传递给函数形参时:例:P=f(N);当对象作为函数返回值时:例:return R;,目录,5.1 类的定义 5.2 对象的定义 5.3 对象的初始化 5.4 成员函数的特性 5.5 静态成员 5.6 友元 5.7 类的作用域 5.8 局部类和嵌套类(自学)5.9 对象的生存周期,5.4 成员函数的特性,一般的成员函数都可以重载,但析构函数不可重载,重载性,例5.7:分析程序输出结果,5.4 成员函数的特性,例5.7:分析程序输出结果,5.4 成员函数的特性,例5.7:分析程序输出结果,输出:a=10,20,5.4 成员函数的特性,例5.7:分析程序输出结果,输出:a=10,20,输出:a=10,20b=4,16,5.4 成员函数的特性,例5.7:分析程序输出结果,b.X=4,b.Y=16,i,i=30,5.4 成员函数的特性,例5.7:分析程序输出结果,b.X=4,b.Y=16,i=30,j,j=12,5.4 成员函数的特性,例5.7:分析程序输出结果,k,k=10,5.4 成员函数的特性,例5.7:分析程序输出结果,k=10,输出:a=10,20b=4,16,输出:a=10,20b=4,16301210,5.4 成员函数的特性,设置参数的缺省值,一般的成员函数和构造函数均可被设置参数的缺省值,回顾:参数的缺省值,给形参赋默认值(缺省值),可以是数值,也可以是任意表达式;函数调用时,编译器按从左向右的顺序将实参与形参结合,当实参的数目不足时,编译器将用函数说明或定义时形参的默认值补足所缺少的实参;一个指定了默认值的参数右边不能出现没有指定默认值的参数。,5.4 成员函数的特性,例5.8:分析程序输出结果,构造函数设置参数的缺省值,5.4 成员函数的特性,例5.8:分析程序输出结果,5.4 成员函数的特性,例5.8:分析程序输出结果,输出:X=3,5,7Y=9,11,7Z=13,15,17,目录,5.1 类的定义 5.2 对象的定义 5.3 对象的初始化 5.4 成员函数的特性 5.5 静态成员 5.6 友元 5.7 类的作用域 5.8 局部类和嵌套类(自学)5.9 对象的生存周期,5.5 静态成员,思考,1、类的成员函数之间如何实现数据的共享?例:M:f1(int x)sum+=x;M:f2(int y)sum+=y;2、同一个类定义的不同对象之间如何实现数据的共享?例:定义了学生类Tstud,现有n个学生对象s1,s2,s3sn,统计输出这n个学生的总成绩:sum=s1.re+s2.re+s2.re+sn.re,5.5 静态成员,思考:引入全局变量是否可行?,例5.9:全局变量的使用,结果?,安全?,5.5 静态成员,全局变量的使用:使用全局变量,可以达到数据共享的目的 使用全局变量,会破坏程序的安全性:全局变量不仅对于类的成员函数可见,而且对于程序中的其他函数可见。因此,在其他函数中对全局变量的值进行更新会直接影响到该全局变量在类的成员函数中的值。,是否有方法,使得一个变量既可以被同一个类定义的不同对象共享,又无法被除类的成员函数之外的其他函数访问?,静态成员 静态数据成员 静态成员函数,静态成员的引入,是为了解决数据共享的问题,5.5 静态成员,所谓静态变量,是指其存储方式为静态存储的变量。其内存空间在程序运行期间由系统分配固定的存储空间;包括:静态局部变量和静态外部变量。声明/定义时使用关键字static;静态局部变量:局部变量,值在函数调用结束后不消失而保留原值,即其占用的存储单元不释放;静态外部变量:全局变量,在程序一个文件中定义的外部变量,该变量值为定义它的文件使用而不能被其他文件引用。,回顾:静态变量,5.5 静态成员,静态数据成员是类的数据成员,与普通数据成员不同处在于它可以被由该类定义的所有对象所共享(实现了在不同对象之间的数据共享);静态数据成员只存储一处,供所有对象共享=一个对象对静态数据成员值更新,则对其它对象而言,静态数据成员值也发生改变。,静态数据成员,5.5 静态成员,静态数据成员在类体内定义,属于类的数据成员:static;例:private:int a,b,c;static int s;,静态数据成员,5.5 静态成员,静态数据成员在类体外初始化::=;静态数据成员初始化时前面不加static,以免与一般静态变量或对象混淆;静态数据成员初始化时前面不加private、public等访问权限控制符;静态数据成员初始化时前面加类名,以表明该静态数据成员属于哪一个类;静态数据成员是类的成员,而不是对象的成员。,静态数据成员,5.5 静态成员,静态数据成员在类体外初始化::=;静态数据成员是静态存储,必须进行初始化操作:例:class Nclass private:static int a;int Nclass:a=5;,静态数据成员,5.5 静态成员,静态数据成员的引用::,静态数据成员,5.5 静态成员,例5.10:静态数据成员的使用,5.5 静态成员,例5.10:静态数据成员的使用,Myclass:Sum=0,Myclass:Sum=20,5.5 静态成员,例5.10:静态数据成员的使用,Myclass:Sum=0,Myclass:Sum=20,Myclass:Sum=54,实现Sum变量在不同对象之间的共享,5.5 静态成员,Myclass:Sum=0,Myclass:Sum=20,Myclass:Sum=54,输出:Number=3,7,10,例5.10:静态数据成员的使用,5.5 静态成员,Myclass:Sum=0,Myclass:Sum=20,Myclass:Sum=54,输出:Number=3,7,10,输出:Number=3,7,10Number=14,9,11,例5.10:静态数据成员的使用,5.5 静态成员,Myclass:Sum=0,Myclass:Sum=20,Myclass:Sum=54,输出:Number=3,7,10,输出:Number=3,7,10Number=14,9,11,输出:Number=3,7,10Number=14,9,11Sum=54,例5.10:静态数据成员的使用,5.5 静态成员,Myclass:Sum=0,Myclass:Sum=20,Myclass:Sum=54,输出:Number=3,7,10,输出:Number=3,7,10Number=14,9,11,输出:Number=3,7,10Number=14,9,11Sum=54,输出:Number=3,7,10Number=14,9,11Sum=54Sum=54,例5.10:静态数据成员的使用,5.5 静态成员,静态成员函数是类的静态成员,不是某个对象的成员函数。因此,在引用静态成员函数时不需要使用对象名;静态成员函数不能直接引用类中说明的非静态成员,可以引用类中说明的静态成员;如果静态成员函数需要引用类中说明的非静态成员,则只能通过对象来引用。,静态成员函数,5.5 静态成员,例5.11:静态成员函数的使用,5.5 静态成员,M:B=0,M:B=5,P.A=5,例5.11:静态成员函数的使用,5.5 静态成员,M:B=0,M:B=5,P.A=5,Q.A=10,M:B=15,例5.11:静态成员函数的使用,5.5 静态成员,M:B=0,M:B=5,P.A=5,Q.A=10,M:B=15,输出:A=5B=15,例5.11:静态成员函数的使用,5.5 静态成员,M:B=0,M:B=5,P.A=5,Q.A=10,M:B=15,输出:A=5B=15,输出:A=5B=15A=10B=15,例5.11:静态成员函数的

    注意事项

    本文(《类和对象一》PPT课件.ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

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




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开