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

    C++铁道出版社第2版第四章.ppt

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

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

    C++铁道出版社第2版第四章.ppt

    C+铁道出版社第铁道出版社第2版版第四章第四章 第四章第四章 类和对象(二)类和对象(二)4.1 4.1 自引用指针自引用指针thisthis4.2 4.2 对象数组与对象指针对象数组与对象指针4.3 4.3 向函数传递对象向函数传递对象4.4 4.4 静态成员静态成员4.5 4.5 友元友元4.6 4.6 类的组合类的组合4.7 4.7 共享数据的保护共享数据的保护4.8 C+4.8 C+程序的多文件组成程序的多文件组成第第四四章章 类和对象(二)类和对象(二) 第四章第四章 类和对象(二)类和对象(二)4.1 4.1 自引用指针自引用指针thisthis 成员函数的存储方式成员函数的存储方式 class Boxclass Box int x; int x; int print() coutx; int print() coutx; ; ; Box Box 对象对象1 1,对象,对象2, 2, 对象对象3;3; 不同对象的数据不同对象的数据成员存放在不同的成员存放在不同的内存地址内存地址 所有对象的成所有对象的成员函数对应的是同员函数对应的是同一个函数代码段一个函数代码段 第四章第四章 类和对象(二)类和对象(二)#include#include/例例4.14.1using namespace std;using namespace std;class Aclass A int x; int x; public: public: A(int x1)x=x1; A(int x1)x=x1; void disp() cout when x= xvoid disp() cout when x= xendlendl; ; ;main()main() A a(1),b(2),c(3); A a(1),b(2),c(3); a.disp(); b.disp(); c.disp();a.disp(); b.disp(); c.disp(); return 0; return 0; a.x=1 b.x=2 c.x=3运行结果:运行结果:when x=1when x=1when x=2when x=2when x=3when x=3 问题:问题:既然所有对既然所有对象的成员函数对应的是象的成员函数对应的是同一个函数代码段。同一个函数代码段。 如何确定分别输出的如何确定分别输出的是:是:a.x, b.x, c.xa.x, b.x, c.x 的的值值呢呢? ? 第四章第四章 类和对象(二)类和对象(二)#include#includeusing namespace std;using namespace std;class Aclass A int x; int x; public: public: A(int x1)x=x1; A(int x1)x=x1; void disp() coutwhen x= void disp() coutwhen x= this-x; x; ;main()main() A a(1),b(2),c(3); A a(1),b(2),c(3); a.a.dispdisp(); b.(); b.dispdisp(); c.(); c.dispdisp();(); return 0; return 0; 当一个对象要调用成员函数时,当一个对象要调用成员函数时,thisthis指针指针中就装着该对象的地址中就装着该对象的地址, , 成员函数就根据这个成员函数就根据这个指针指针, ,找到相应的数据找到相应的数据, ,然而进行相应的操作。然而进行相应的操作。a.xb.xc.x运行结果:运行结果:when x=1when x=1when x=2when x=2when x=3when x=3在在C+C+成员函数成员函数中事先设置了一中事先设置了一个名为个名为thisthis的对象指针的对象指针 第四章第四章 类和对象(二)类和对象(二) 在通常情况下,在通常情况下,thisthis指针指针在糸统中是在糸统中是隐式隐式地存在地存在的。我们也可以将其的。我们也可以将其显式显式地表示出来。地表示出来。 第四章第四章 类和对象(二)类和对象(二)#include /例例4.24.2using namespace std;class A int x; public: A(int x1)x=x1; void disp() coutnthis=this when x=x;main() A a(1),b(2),c(3); a.disp(); b.disp(); c.disp(); return 0; 当执行当执行a.disp()a.disp()时,时,相当于执行相当于执行coutcout nthis=nthis= &a&a when x=when x=a.x;a.x; 显示显示thisthis指针的值,指针的值,即当前对象的地址即当前对象的地址运行结果:运行结果: this=0 this=0012012FFFF7c7c when x=1 when x=1 this= this=0012FF780012FF78 when x=2 when x=2 this= this=0012FF740012FF74 when x=3 when x=3 第四章第四章 类和对象(二)类和对象(二)4.2.1 4.2.1 对象数组对象数组 定义一维对象数组的格式如下定义一维对象数组的格式如下: : 类名类名 数组名数组名 下标表达式下标表达式;例如例如: : exam ob4; exam ob4; 说明:共建立了说明:共建立了四个对象四个对象, ,即每一个数组元素是一即每一个数组元素是一个对象个对象( (即即ob0ob0、ob1ob1、ob2ob2、 ob3)ob3),共调用了,共调用了4 4次次构造函数。构造函数。4.2 对象数组与对象指针对象数组与对象指针 第四章第四章 类和对象(二)类和对象(二) 如果类中含有带有如果类中含有带有一个参数一个参数的构造函数的构造函数,则定义,则定义对象数组时,可通过初始值表进行赋值。对象数组时,可通过初始值表进行赋值。 例如例如: : exam ob4=11,22,33,44; exam ob4=11,22,33,44; 第四章第四章 类和对象(二)类和对象(二)例例4.4 4.4 用只有一个参数的构造函数给对象数组赋值用只有一个参数的构造函数给对象数组赋值。 #includeclass exam int x; public: exam(int n) x=n; int get_x( ) return x; ;main( ) exam ob4= 11, 22, 33, 44; for (int i=0;i4;i+) coutobi.get_x( ) ;return 0; 通过通过初始值表初始值表给对象给对象数组赋值数组赋值带有带有一个参数一个参数的构造函数的构造函数 调用调用构造函数构造函数exam()exam()进行初始化进行初始化:ob0.x=11, ob1.x=22ob0.x=11, ob1.x=22ob2.x=33, ob3.x=44ob2.x=33, ob3.x=44程序运行结果如下:程序运行结果如下: 11 22 33 4411 22 33 44相当于以下执行了四条语句相当于以下执行了四条语句: :coutob10.get_x() ;coutob10.get_x() ;coutob11.get_x() ;coutob11.get_x() ;coutob12.get_x() ;coutob12.get_x() ;coutob13.get_x() ;coutob13.get_x() ; 第四章第四章 类和对象(二)类和对象(二)例例4.4-1 4.4-1 用只有一个参数的构造函数给对象数组赋值。用只有一个参数的构造函数给对象数组赋值。 #includeclass exam int x; public: exam(int n) x=n; int get_x( ) return x; ;main( ) exam ob4= exam(11), exam(22), exam(33), exam(44); for (int i=0;i4;i+) coutobi.get_x( ) ;return 0; 通过初始值表给对象数通过初始值表给对象数组赋值的组赋值的另一种方法另一种方法带有带有一个参数一个参数的构造函数的构造函数 调用调用构造函数构造函数exam()exam()进行初始化进行初始化:o b 0 . x = 1 1 , o b 0 . x = 1 1 , ob1.x=22ob1.x=22o b 2 . x = 3 3 , o b 2 . x = 3 3 , ob3.x=44ob3.x=44程序运行结果如下:程序运行结果如下: 11 22 33 4411 22 33 44 第四章第四章 类和对象(二)类和对象(二) 在设计类的构造函数时就要充分考虑到对象数组元在设计类的构造函数时就要充分考虑到对象数组元素初始化的需要。素初始化的需要。 当各元素对象的当各元素对象的初值要求为不同的值时初值要求为不同的值时, ,需要定义需要定义带参数带参数( (无默认值无默认值) )的构造函数,的构造函数,如上例。如上例。 当各个元素的当各个元素的初始值为相同的值时初始值为相同的值时, ,可以在类中定可以在类中定义义不带参数的构造函数或带有默认参数值的构造函数不带参数的构造函数或带有默认参数值的构造函数。 第四章第四章 类和对象(二)类和对象(二)#include /例4.5-1using namespace std;class exam int x; public: exam( ) x=123; exam(int n) x=n; int get_x() return x; ; int main() exam ob4=55,66; int i; for (i=0;i4;i+) coutobi.get_x() ; return 0; 不带参数的构造函数不带参数的构造函数带带一个参数一个参数的构造函数的构造函数运行结果如下运行结果如下; ;55 66 123 12355 66 123 123 第四章第四章 类和对象(二)类和对象(二) 如果类中含有带有如果类中含有带有多个参数多个参数的构造函数,的构造函数,则定义对象数组时应当如何实现初始化呢?则定义对象数组时应当如何实现初始化呢? 第四章第四章 类和对象(二)类和对象(二)#include #include using namespace std;using namespace std;class Rectangleclass Rectangle public: public: Rectangle(int len=10,int wid=10) Rectangle(int len=10,int wid=10) length=len; width=wid; length=len; width=wid; int area()return(lengthint area()return(length* *width);width); private: private: int length,width; int length,width;int main()int main() Rectangle Rectangle rec3= rec3= Rectangle(10,20), Rectangle(10,20), Rectangle(30,40), Rectangle(30,40), Rectangle(50,60) ; Rectangle(50,60) ; coutThe area of rec0 is coutThe area of rec0 is rec0.area()rec0.area()endl; endl; coutThe area of rec1 is coutThe area of rec1 is rec1.area()rec1.area()endl; endl; coutThe area of rec2 is coutThe area of rec2 is rec2.area()rec2.area()endl; endl; return 0; return 0; 例例4.64.6用带有多个用带有多个参数的构造函数参数的构造函数给对象数组赋值给对象数组赋值 rec0.length=10rec0.length=10rec0.width=20rec0.width=20程序运行结果如下程序运行结果如下: :The area of rec0 is 200The area of rec0 is 200The area of rec1 is 1200The area of rec1 is 1200The area of rec2 is 3000The area of rec2 is 3000rec1.length=30rec1.length=30rec1.width=40rec1.width=40rec2.length=50rec2.length=50rec2.width=60rec2.width=60 第四章第四章 类和对象(二)类和对象(二) 4.2.2 4.2.2 对象指针对象指针 对象指针对象指针就是用于存放对象地址的指针变量。就是用于存放对象地址的指针变量。 声明对象指针的一般语法形式为声明对象指针的一般语法形式为: : 例如例如: : exe exe * *p; p; /定义类定义类exeexe的对象指针变量的对象指针变量P P 类名类名* 对象指针名对象指针名; 第四章第四章 类和对象(二)类和对象(二)1. 1. 用对象指针访问单个对象成员用对象指针访问单个对象成员 class Dateclass Date . . . . . .;int main()int main() Date date;Date date; / /定义类定义类DateDate的对象的对象datedate Date Date * *pd; /pd; /定义定义pdpd为指向类为指向类DateDate的对象指的对象指针变量针变量 pd=&date;pd=&date; . . . . . . 将对象将对象datedate的地址的地址赋给对象指针赋给对象指针变量变量pdpd 第四章第四章 类和对象(二)类和对象(二) #include /#include /例例4.7 4.7 using namespace std;using namespace std;class Dateclass Date public:public: void setDate(int y,int m,int d) void setDate(int y,int m,int d) year=y; month=m; day=d; year=y; month=m; day=d; void showDate() void showDate() coutyear.month.dayendl; coutyear.month.day-setDate(2009,11,14);setDate(2009,11,14); pdpd-showDate(); showDate(); return 0; return 0; 用对象指针访问单用对象指针访问单个对象成员个对象成员调用调用pdpd所指向的对象所指向的对象datedate中的函数中的函数setDatesetDate调用调用pdpd所指向的对所指向的对象象datedate中的函数中的函数showDateshowDate用用对象指针对象指针访问对象成员时,访问对象成员时,不能用不能用“.”.”操作符,而应操作符,而应使用使用“- ” ”操作符操作符 第四章第四章 类和对象(二)类和对象(二) 2. 2. 用对象指针访问对象数组用对象指针访问对象数组 Date Date * *pd; /pd; /定义指向类定义指向类DateDate的对象指针变量的对象指针变量pdpd Date date2 / Date date2 /定义类定义类DateDate的对象数组的对象数组date2date2 pd=date; / pd=date; /把对象数组把对象数组datedate的第的第1 1个元素个元素date0date0 / /的地址赋给对象指针的地址赋给对象指针pdpd。 第四章第四章 类和对象(二)类和对象(二) #include #include using namespace std;using namespace std;class Dateclass Date /声明类声明类DateDate public: public: void setDate(int y,int m,int d) void setDate(int y,int m,int d) year=y; month=m; day=d; year=y; month=m; day=d; void showDate() void showDate() coutyear.month coutyear.month .dayendl.dayshowDate(); pd-showDate(); pd+; / pd+; /对象指针变量对象指针变量pdpd加加1,1,即指向下一个元素即指向下一个元素date1date1的地址的地址 pd-showDate(); pd-showDate(); return 0; return 0; 调用元素调用元素date0date0的的成员函数成员函数setDatesetDate程序运行结果为程序运行结果为: : 2009 .11.142009 .11.142009 .12.252009 .12.25调用元素调用元素date1date1的的成员函数成员函数setDate setDate 调用调用pdpd所指向的对象所指向的对象date0date0中的函中的函数数showDate,showDate,即即date0.showDate()date0.showDate()调用调用pdpd所指向的对象所指向的对象date1date1中中的函数的函数showDate,showDate,即即date1.showDate()date1.showDate()将例将例4.74.7的主函数的主函数mainmain改写为改写为: : 第四章第四章 类和对象(二)类和对象(二)4.2.3 string4.2.3 string类类 C+C+支持两种类型的字符串支持两种类型的字符串: : 第一种第一种是是C C语言中介绍过的包括语言中介绍过的包括一个结束符一个结束符00的字符数组的字符数组, ,标准库函数提供了一组对其进行操作的标准库函数提供了一组对其进行操作的函数函数, ,可以完成许多常用的字符串操作可以完成许多常用的字符串操作, ,如如 字符串复制函数字符串复制函数strcpystrcpy 字符串连接函数字符串连接函数strcatstrcat 求字符串长度函数求字符串长度函数strlen strlen 等。等。C+C+中仍保留了这种格式字符串。中仍保留了这种格式字符串。例如例如: char str15= abcd ; char str2= efgh ; coutstrcat(str1,str2); /调用调用strcat函数函数 输出:输出:abcdefgh 第四章第四章 类和对象(二)类和对象(二) 第二种第二种是在是在C+C+的标准类库中的标准类库中, ,声明了一种更方便的声明了一种更方便的字符串类型字符串类型, ,即即字符串类字符串类stringstring, string, string类提供了对字类提供了对字符串进行处理所需要的操作。符串进行处理所需要的操作。使用使用stringstring类必须在程序的开始包括头文件类必须在程序的开始包括头文件string:string: #include #include stringstring类的字符串对象的定义格式如下类的字符串对象的定义格式如下: : string string 对象对象1,1,对象对象2,;2,;例如例如: : string str1,str2; string str1,str2; string str3(“China”); string str3(“China”); 字符串对象初始化方式也可写成字符串对象初始化方式也可写成: : string str4=“China”; string str4=“China”; 定义定义stringstring类对象类对象str1str1和和str2str2 定义定义stringstring类对象类对象str3,str3,同时对其初始化同时对其初始化 定义定义stringstring类对象类对象str4,str4,同时对其初始化同时对其初始化 第四章第四章 类和对象(二)类和对象(二) 第四章第四章 类和对象(二)类和对象(二)例例4.9-1 string4.9-1 string类运算符的操作。类运算符的操作。#include#include#include #include using namespace std;using namespace std;int main()int main() string s1=ABC; / string s1=ABC; /定义定义stringstring类对象类对象s1s1并进行初始化并进行初始化 string s2=DEF; /string s2=DEF; /定义定义stringstring类对象类对象s2s2并进行初始化并进行初始化 string s4,s5; /string s4,s5; /定义定义stringstring类对象类对象s4s4和和s5s5 s4=s1; /s4=s1; /字符串赋值字符串赋值 couts4 is s4endl; /couts4 is s4endl; /字符串输出字符串输出 s5=s1+s2; /s5=s1+s2; /字符串连接字符串连接 couts1+s2 is s5endl;couts1+s2 is s5endl; s5=s1+123; /s5=s1+123; /字符串连接字符串连接 couts1+123 is s5endl;couts1+123 is s5endl; if (s4=s1) /if (s4=s1) /字符串比较字符串比较 couts4=s1 endl;couts4=s1 endl; else couts4s1 endl; else couts4s1 endl; return 0; return 0;程序运行结果为程序运行结果为: :s4 is ABCs4 is ABCs1+s2 is ABCDEFs1+s2 is ABCDEFs1+123 is ABC123s1+123 is ABC123s4=s1s4=s1从这个程从这个程序可以看序可以看出出, ,使用使用stringstring类类后后, ,字符字符串运算变串运算变得非常简得非常简单、直观。单、直观。 第四章第四章 类和对象(二)类和对象(二) 4.3 4.3 向函数传递对象向函数传递对象 4.3.1 4.3.1 使用对象作为函数参数使用对象作为函数参数 4.3.2 4.3.2 使用对象指针作为函数参数使用对象指针作为函数参数 4.3.3 4.3.3 使用对象引用作为函数参数使用对象引用作为函数参数本节主要内容本节主要内容 第四章第四章 类和对象(二)类和对象(二)#include #include using namespace std;using namespace std;void swap(void swap(int m,int nint m,int n) ) int temp int temp; ; temp=m temp=m; ; m=n m=n; ; n=temp n=temp; ; main() main() int a=5,b=10 int a=5,b=10; ; cout cout a=a= aa b= b= bendlbendl; ; swap(a,b)swap(a,b); ; coutcout a=a= aa b= b= bendlbendl; ; return 0 return 0; ; 用用变量变量做函数参数做函数参数注意调用方法注意调用方法运行结果:运行结果:a a和和b b的值未互换的值未互换 a=5,b=10a=5,b=104.3 向函数传递对象向函数传递对象 第四章第四章 类和对象(二)类和对象(二)#include #include using namespace std;using namespace std;void swap(void swap(intint* * m,int m,int* * n n) ) int temp int temp; ; temp= temp=* *m m; ; * *m=m=* *n n; ; * *n=tempn=temp; ; main()main() int a=5,b=10 int a=5,b=10; ; cout cout a=a= aa b= b= bendlbendl; ; swap(&a,&b)swap(&a,&b); ; coutcout a=a= aa b=b= bendlbendl; ; return 0 return 0; ; 用用变量变量指针指针做函数参数做函数参数注意调用方法注意调用方法 运行结果:运行结果:a a和和b b的值互换的值互换 a=10,b=5a=10,b=5传址调用传址调用 第四章第四章 类和对象(二)类和对象(二)#include #include using namespace std;void swap(void swap(int& m,int& nint& m,int& n) ) int temp int temp; temp=m temp=m; m=n m=n; n=temp n=temp; main() main() int a=5,b=10 int a=5,b=10; cout cout a=a= aa b= b= bendlbendl; swap(a,b)swap(a,b); coutcout a=a= aa b= b= bendlbendl; return 0 return 0; 用用变量的变量的引用引用做函数参数做函数参数注意调用方法注意调用方法 运行结果:运行结果:a a和和b b的值互换的值互换 a=10,b=5a=10,b=5 第四章第四章 类和对象(二)类和对象(二)#include using namespace std;class op int x,y; public: op(int i,int j) x=i;y=j; int getx() return x; int gety() return y;void swap(op ob) int temp; temp=ob.x; ob.x=ob.y; ob.y=temp; ;int main() op obj(5,10); coutx=obj.getx() y=obj.gety()endl; obj.swap(obj); coutx=obj.getx() y=obj.gety()endl; return 0; 传值调用传值调用, ,函数中对函数中对形参对象形参对象成员成员的任何修改均不影响调用的任何修改均不影响调用该函数的该函数的实参对象实参对象本身本身使用对象作为函数参数使用对象作为函数参数 运行结果运行结果: :x=5 y=10 x=5 y=10 x=5 y=10 x=5 y=10a a和和b b的值未互换的值未互换 4 4.3.1 .3.1 使用使用对象对象作为函数参数作为函数参数 第四章第四章 类和对象(二)类和对象(二)#include using namespace std;class op int x,y; public: op(int i,int j)x=i;y=j; int getx()return x; int gety()return y; void swap(op *ob) int temp;temp=ob-x;ob-x=ob-y;ob-y=temp; ;int main() op obj(5,10); coutx=obj.getx() y=obj.gety()endl; obj.swap(&obj); coutx=obj.getx() y=obj.gety()endl; return 0; 传址调用传址调用, ,函数中对函数中对形参对象形参对象成员成员的任何修改均影响调用该函的任何修改均影响调用该函数的数的实参对象实参对象本身。本身。使用对象指针作为函数参数使用对象指针作为函数参数 运行结果运行结果: :x=5 y=10 x=5 y=10 x=10 y=5x=10 y=5a a和和b b的值互换的值互换4.3.2 4.3.2 使用使用对象指针对象指针作为函数参数作为函数参数 第四章第四章 类和对象(二)类和对象(二)#include class op int x,y; public: op(int i,int j)x=i;y=j; int getx()return x; int gety()return y; void swap(op &ob) int temp; temp=ob.x; ob.x=ob.y; ob.y=temp; ;int main() op obj(5,10); coutx=obj.getx() y=obj.gety()endl; obj.swap(obj); coutx=obj.getx() y=obj.gety()endl; return 0; 可见,可见,使用使用对象引用对象引用作为函数参作为函数参数数不但具有用对象指针作函数参数不但具有用对象指针作函数参数的优点的优点, ,而且用对象引用作函数参而且用对象引用作函数参数将更简单、更直接。数将更简单、更直接。使用对象引用作为函数参数使用对象引用作为函数参数 运行结果运行结果: :x=5 y=10 x=5 y=10 x=10 y=5x=10 y=5a a和和b b的值互换的值互换 传址调用传址调用, ,函数中对函数中对形参对象成员形参对象成员的任的任何修改均影响调用该函数的何修改均影响调用该函数的实参对象实参对象本身。本身。4.3.3 4.3.3 使用使用对象引用对象引用作为函数参数作为函数参数 第四章第四章 类和对象(二)类和对象(二) 4.4 4.4 静态成员静态成员 4.4.1 4.4.1 静态数据成员静态数据成员 4.4.2 4.4.2 静态成员函数静态成员函数本节主要内容本节主要内容 第四章第四章 类和对象(二)类和对象(二)4.4.1 4.4.1 静态数据成员静态数据成员 引例引例: : 在类在类StudentStudent中,声明数据成员中,声明数据成员countcount,希望,希望每定义一个对象每定义一个对象countcount加加1 1,从而达到统计学生的总数,从而达到统计学生的总数的目的。的目的。 4.4 静态成员静态成员 第四章第四章 类和对象(二)类和对象(二)#includeusing namespace std; class Student int count; public: Student( ) count+; void print( ) / / 成员函数,显示当前学生数成员函数,显示当前学生数 coutcount= count endl; ; main( ) int count=0; Student Stu1; /定义第定义第1 1个学生对象个学生对象Stu1,Stu1,第第1 1次调用构造函数次调用构造函数 Student Stu2; /定义第定义第2 2个学生对象个学生对象Stu2,Stu2,第第2 2次调用构造函数次调用构造函数 Stu1.print(); Stu2.print(); return 0; 声明数据成员声明数据成员countcount,表示学生,表示学生数数, ,用于统计学生的总数用于统计学生的总数 构造函数构造函数, ,希望每定义一个希望每定义一个学生对象,学生数学生对象,学生数countcount加加1 1希望打印的结果为:希望打印的结果为:count=2count=2count=2count=2实际打印的结果为:实际打印的结果为:count= -858993459count= -858993459count= -858993459count= -858993459 第四章第四章 类和对象(二)类和对象(二)#include using namespace std; class Student int count; public: Student( ) count+; void print( ) / / 成员函数,显示当前学生数成员函数,显示当前学生数 coutcount= count endl; ; main( ) int count=0; Student Stu1; /定义第定义第1 1个学生对象个学生对象Stu1,Stu1,第第1 1次调用构造函数次调用构造函数 Student Stu2; /定义第定义第2 2个学生对象个学生对象Stu2,Stu2,第第2 2次调用构造函数次调用构造函数 Stu1.print(); Stu2.print(); return 0; Stu1.count Stu1.count 二者是独立的,互不相干二者是独立的,互不相干 Stu2.countStu2.count出现错误的出现错误的原因是原因是: 一个学生对象的一个学生对象的count仅仅属于这个学仅仅属于这个学生对象生对象,而不是所有学生对象所共享的而不是所有学生对象所共享的,因因此此count不能表示所有学生的总人数。不能表示所有学生的总人数。 第四章第四章 类和对象(二)类和对象(二)#include using namespace std; class Student int count; public: Student( ) count+; void print( ) / / 成员函数,显示当前学生数成员函数,显示当前学生数 coutcount= count endl; ; main( ) int count=0; Student Stu1; /定义第定义第1 1个学生对象个学生对象Stu1,Stu1,第第1 1次调用构造函数次调用构造函数 Student Stu2; /定义第定义第2 2个学生对象个学生对象Stu2,Stu2,第第2 2次调用构造函数次调用构造函数 Stu1.print(); Stu2.print(); return 0; countcountStu1.count Stu1.count 三者是独立的,互不相干三者是独立的,互不相干 Stu2,countStu2,count 解决办法:解决办法: 为了实现同一个类的多个对象之为了实现同一个类的多个对象之间的数据共享间的数据共享,C+,C+提出了提出了静态数据静态数据成员成员的概念。的概念。 第四章第四章 类和对象(二)类和对象(二) 4.4.1 4.4.1 静态数据成员静态数据成员 在一个类中,将一个数据成员说明为在一个类中,将一个数据成员说明为staticstatic,这,这种成员称为种成员称为静态数据成员静态数据成员。 与一般的数据成员不同与一般的数据成员不同, ,无论建立多少个类的对象无论建立多少个类的对象, ,都只有一个静态数据成员的拷贝都只有一个静态数据成员的拷贝。从而实现了同一个类从而实现了同一个类的不同对象之间的数据共享。的不同对象之间的数据共享。 定义静态数据成员的格式如下定义静态数据成员的格式如下: : static static 数据类型数据类型 数据成员名数据成员名; ; 第四章第四章 类

    注意事项

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

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




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

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

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

    收起
    展开