C++ 课件(修订)_第1页
C++ 课件(修订)_第2页
C++ 课件(修订)_第3页
C++ 课件(修订)_第4页
C++ 课件(修订)_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C+世界地图C+世界众生相用函数封装程序C+的面向对象C+的异常处理STL的魅力总结经验1.C+世界地图有人说,C+是一种高级程序设计语言;有人说,C+是C语言的继承者;有人说,C+是一种面向对象的思维方式。这些答案都从某个侧面回答了“C+是什么”,在这里我不能给您所谓的完美的答案。我所能做到的是如实的讲述C+时间的各色公民、风俗见闻,作一个导游为各位旅行者指引方向和路径。等各位完成C+世界之旅后,会有自己的答案。首先了解C+的发展历史,可以加深我们了解C+的文化,从而更好的掌握这门语言。很久以前.1967年,计算机科学家丹尼斯.里奇进入美国AT&T的贝尔实验室工作,里奇和同事肯.汤普

2、森发现在DEC PDP-7机器上编写程序很困难,只能用汇编语言编程,于是汤普森设计了一门高级语言,命名为B语言(他妻子名字的第一个字母是B),但是B语言本身设计的缺陷使得汤普森在内存的限制面前一筹莫展。到了1973年,里奇对B语言进行改良,他赋予这门新语言强有力的系统控制方面的能力。新语言非常简洁、高效,里奇把它命名为C语言,意为B语言的下一代程序设计语言。1978年里奇和布莱恩.科尔尼一起出版了C程序设计语言。1989年,C语言被ANSI标准化。20世纪90年代,标准再次更新,就是C99,2000年ANSI采用了这个标准。1979年贝尔实验室的本贾尼.斯特劳斯特卢普和同事使用C语言编程分析U

3、NIX内核的时候,为了使得程序更好用给C语言加入了Simula语言的类机制。这个时候卢普产生了发明新语言的想法。卢普为了突破C语言的种种局限,借鉴了其他语言的优点,开发出C+语言,实现了C到C+的进化。1985年卢普完成了C+程序设计语言第一版。 到了1990年C+里又出现了标准模板库(STL)和异常处理,使其功能变得更强大。2003年推出了C+03标准,最新的C+0 x等待公布。微软开发了C#,C#继承了C+的很多特性,配合.NET Framework,C#的开发越来越简单,但是同样受制于.NET Framework,同样的功能使用C#只有一种方法,因为很多功能框架就定死了,而使用C+,我们

4、就可以用不同的方法实现,因为C+更贴近操作系统,只要了解背后的机制就能编写对应的方法去处理问题。与windows系统1985年盖茨用C+完成了windows1.0,C+就和windows紧密连接在一起,windows的底层是用C+开发的,大多数应用也是C+开发的,windows系统里流淌着C+的血液,这使得C+调用windows API具有优势。与linux操作系统Linux本身是C语言开发的,C与C+有这一脉相承的关系,使得linux对C+的开发非常友好。Linux上的多数的应用都是C+开发的,比如Apache、MySOL等。与嵌入式系统嵌入式系统内存容量低、CPU主频低,要求代码执行效率高

5、,同时为了提高开发效率,要求高级语言,嵌入式系统对开发语言的苛刻要求,是C+的优势所在。除了低级的汇编语言外,C+很具优势。编程的过程是将自然语言翻译成C+语言的过程举个例子:有个男孩叫小茗,有个女孩叫小云。男孩向女孩主动示爱。女孩对男孩进行考察,如果男孩有房有车,则与男孩交往;如果没有,则与男孩拜拜。男孩:小茗男孩:小云男孩向女孩示爱女孩进行考察与男孩拜拜与男孩交往有房有车没房或没车boy:xm男孩:xyxm.ShowLoveTo(xy)If(xm.HasHouseAndCar()xy.SayByeTo(xm)xy.SayHelloTo(xm)true false自然语言转成程序流程自然语言

6、翻译成C+如下Boy xm;/声明对象xmGirl xy; /声明对象xy/男孩向女孩示爱xm.ShowLoveTo(xy);/女孩考察男孩,如果男孩有房又有车If(xm.HasHouseAndCar() xy.SayHelloTo(xm); /女孩和男孩交往Else xy.SayByeTo(xm); /女孩和男孩拜拜程序员利用程序设计语言准确定义计算机需要使用的数据,并定义在不同情况下所应当采取的行动,让计算机完成特定的任务。包含数据成分、运算成分、控制成分、传输成分。多读多写程序是掌握编程的不二法门。和Google、电驴、MSDN做朋友学好C+C+世界的迎宾:“HelloWorld.exe

7、”C+程序的创建 用Visual Studio创建C+程序C+程序的构成 C+程序=预编译指令+程序代码+注释 /HelloWorld.cpp:定义控制台应用程序的入口点#include “stdafx.h”#include using namespace std;Int_tmain(int argc,_TCHAR* argv) cout“Hello world!”end;return 0; /屏幕上打印“Hello World!”注释预编译指令程序代码C+程序执行过程源代码文件经过预编译(展开源代码中的宏,引入相应的头文件等)形成预处理后的源文件,编译器将预处理后的源文件编译成目标代码文件,

8、形成目标文件,链接器将多个目标文件和库函数的目标文件进行连接,形成可执行程序。/编译源文件成为目标文件Cl /c /EHsc HelloWorld.cpp/链接目标文件Link HelloWorld.obj 执行的时候由操作系统初始化定义的全局变量,调用全局对象的构造函数。最后进入程序的入口,就是_tmain(),在_tmain()里一条语句接着一条语句执行,遇到return 0,_tmanin()执行结束,程序也就结束。 .cpp源文件.obj目标文件.exe可执行程序编译器cl.exe链接器link.exe函数库文件HelloWorld.objHelloWorld.exe基本输入输出流C+

9、使用标准类库iostream实现基本数据的输入输出Cout:处理标准输出,就是屏幕输出cout“Hello World”;Cout“1+2=”1+2;cin:处理标准输入,就是键盘输入int nAge;string strName;cinnAgestrName;实例:cin&cout配合使用#include “stdafx.h”#include /引入定义输入输出流对象的头文件using namespace std; /引入std名字空间int _tmain(int argc, _TCHAR* argv)cout “请输入两个整数:” v1 v2; /从键盘输入提取用户输入的整数cou

10、t “两个整数” v1 “和” v2 /将计算结果输出到屏幕 “的和是” v1+v2 endl;return 0;读/写文件(ofstream&ifstream)#include “stdafx.h”#include #include using namespace std;Int _tmain(int argc, _TCHAR* argv) int nYear, nMonth, nDate; ifstream fin(“Date.txt”) if(!fin.bad() /尝试打开文件并将文件数据打印到屏幕上fin.ignore(256,n); fin nYear nMonth nDa

11、te; cout “文件中的日期是” nYear“-”nMonth“-”nDateendl; fin.close();elsecout “无法打开文件并进行读取”endl;读/写文件(ofstream&ifstream)cout “请输入当前日期(年月日):”nYearnMonthnDate;ofstream fout(“Date.txt”);If(!fout.bad()fout“用户输入的当前日期是:n” nYear“ “nMonth“ “nDate;fout.close();elsecout“无法打开文件并进行写入”endl;return 0;上述程序中,首先创建一个输入文件流if

12、stream的对象fin,并利用它的构造函数将其连接到一个文本文件Date.txt.当利用fin对象成功打开一个文件后,就利用提取符“”从fin中提取数据。“”会以空格为分隔符逐个从文件中读取数据,并通过ofstream对象保存到文件中。2.C+世界众生相l基本数据类型p 整型,int,p 字符型, char,p 实型, float, double,p 逻辑型, bool ( standard c+ new feature ! ) /bool类型转成整型,false就是0 /true就是 1 char, unsigned char, signed char, int, unsigned int

13、, signed int, short int, unsigned short int, signed short int, long int, signed long int, unsigned long int, float, double, long double,实型数据 (float, double) 无unsigned编写一个程序,打印出所有C+基本类型的大小#include using namespace std;int main() cout size of char is: sizeof(char) endl; cout size of unsigned char is: s

14、izeof(unsigned char) endl; cout size of signed char is: sizeof(signed char) endl; cout size of int is: sizeof(int) endl; cout size of unsigned int is: sizeof(unsigned int) endl; cout size of signed int is: sizeof(signed int) endl; cout size of short int is: sizeof(short int) endl; cout size of long

15、int is: sizeof(long int) endl;l构造数据类型p数组类型p结构类型/长方形数据结构struct Rectint m_nLength; /长int m_nWidth; /宽;p联合类型p枚举类型:enum Weekdaymon,tue,wed,thu,fri,sat,sun; /每个枚举元素都代表一个整数 /*在没有赋值的情况下,每个枚举元素都有一个默认的 整数值,依次是0、1、2、3.*/Weekday nDay = Weekday:sun; / 将其初始值设置为周日nDay=7 /编译报错,只能使用枚举类型的某个可选值对枚举型变量赋值。 /枚举元素一旦在定义过程中

16、赋值,以后不能改变,当作常量使用。 /如果想把某个变量限制在某几个可选值范围之内,可以声明该变量为枚举类型。l变量必须先声明后使用p语法格式举例:int nStudentNum ;int nStudentID, nClass, nAge;float fScore;int case;int 3member;bool do you knowp变量命名:匈牙利命名法:变量名=属性+类型+对象描述大多数项目成员能够认识就是好的命名规则p变量初始化Int nHeight=178;String strName(“XiaoMing”); /建议对变量进行初始化,否则系统分配一个随机值l常量无需声明直接使用p

17、整型常数nHeight=173; /十进制常数nHeight=0255; /八进制常数nHeight=0 xAD; /十六进制常数p浮点型常数1.0、0.125、0.0 1.1e5=1.1105p字符常量char aMark=A;cout!end1;p字符串常量strName=“huawei”;cout“你的名字是: ”赛门铁克” “end1;l用宏与const关键字定义常量p用#define预编译指令来定义一个宏:#define PI 3.15159 Double fCircle=2*PI*fR /利用宏代替常量计算圆的周长,宏的本质是替代 /如果预编译程序在代码中发现了宏,就会用宏的值代替

18、宏#define MIN 0#define MAX 100for(int I = MIN; i MAX; i+) /pconst关键字const float PI=3.141592; /PI的值不可再改,必须在定义常量的同时完成它的赋值l字符串类型C+中没有一个单独的字符串类型,string其实是字符数组的包装,在字符数组中,每个位置保存一个字符,用“0”表示字符串的结束。p如果包装的是char类型的数组,则字符串类型为string,如果包装的是wchar_t类型的数组,则字符串类型就是wstring。例如:string strMorning(“Good Morning!”);wstring

19、strChina(“中国”);coutstrMorning;wcout.imbue(locale(“chs”); /wstring类型字符串输出时候要使用wcout对象,并且用imbue()wcoutstrChinaendl; /设定字符的编码方式pString 类型不仅包装了字符数组,同时还提供了很多跟字符串相关的操作,可以获得一个字符串的长度,或者在字符串中查找某个字符,方便了对字符串的处理。例如:String strMorning(“Good Morning!”);int nLength = strMorning.length();String:size_type nPos=strMor

20、ning.find(0);CoutstrMorning“的长度是:”nLength“n在位置”nPos“有一个字符o。”endl;l数组int nSalary100;float fArray23;int point100100100;Int nArray5 = 1,2,3,4,5; /定义数组并进行初始化Float fArray23=2.3,2.5,3.6,1.8,1.9,2.8;/通过循环给数组赋值int a34;for(int i=0,i3,i+) for(int j=0; j4; j+) aij=i+j; count“输出的数:”+aij+”,”endl; cout“n”; 结构类型/将

21、员工这个事物的多个属性打包成一个结构体struct Employee string m_strName; bool m_bmale; int m_nAge; int m_nSalary;const int MAX_COUNT = 1000; /表示最大员工数int main(int argc, _TCHAR* argv) Employee arrEmplyeeMAX_COUNT; cout“请输入员工信息”arrEmployeenCount.m_strNamarrEmploynCount.m_bMalearrEmploynCount.m_nAge arrEmploynCount.m_nSala

22、ry;结构类型/检查是否输入完毕If(“end”= arrEmployeenCount.m_strName)break;/开始输入下一个员工的信息+nCount;while(nCount MAX_COUNT);/显示所有员工的信息cout“员工信息:n 姓名 t 性别 t 年龄 t 工资” endl;for(int i=0; inCount; i+)/访问数组中结构体变量的成员变量,获得员工的各种属性coutarrEmployeei.m_strName“t” arrEmployeei.m_bMale“t” arrEmployeei.m_nAge“t” arrEmployeei.m_nSalar

23、yendl; return 0; l指针类型在典型的32 位平台上,可以把内存空间看成是由很多个连续的小房间构成的,每个房间就是一个小存储单元,大小是1 个字节,房间中住着数据。有的数据比较小,比如一个char类型的字符,它只需要一个房间就够了。而有的数据比较大,就需要占用好几个房间,比如一个int 类型的整数,其大小是4 个字节,需要4 个房间才可以安置。为了方便找到住在这些房间中的数据,房间就需要按照一定的规则编号,这个编号,就是通常所说的内存地址。这些编号是用一个32 位的二进制数来编码的,比如0 x7AE4074B、0 xFFFFFFFF 等。用于存放内存单元地址的数据类型,就是指针。

24、int n=703;int *p = &n;int m=*p; l运算符注意:float和double的比较分支结构比较v1和v2的大小switch语句while循环int main(int argc, _TCHAR* argv)cout “=每月收支统计程序=“endl;cout “请输入你本月的收入(正数)和支出(负数),0表示输入结束。”endl;Int nInput = 1;Int nTotal = 0;While (0!=nInput)cout nInput;nTotal+=nInput;cout “你本月的结余是: “ nTotal endl; /输出结果return 0;

25、dowhile使用dowhile循环结构改写后,nInput无须给定初始值,可以直接由用户输入赋值,然后再进行条件判断。在某些至少进行一次循环的需求中,使用dowhile比较合适for循环工资统计程序3.用函数封装程序l举例说明1int Add(int a, int b)int nResult = a+b; /声明并定义Add函数 return nResult;int _tmain(int argc, _TCHAR* argv)int a=1,b=2;int nResult = Add(a,b);couta“+”b“=“nResultendl;return 0;l举例说明2/输入员工的工资数据

26、到工资数组中int InputSalary(int* pSalary, const int MAX_NUM)int nTemp = 0; /暂存用户输入的数据Int nIndex= 0; /输入序号docout “请输入员工”Index“的工资:”nTemp;if(nTemp0)break;pSalarynIndex = nTemp;+nIndex;while(nIndex MAX_NUM);return nIndex; /返回输入的数据总数l举例说明2l举例说明2举例说明:inline int add(int a, int b)return a+b;int _tmain(int argc,

27、_TCHAR* argv)cout “a+b”“=“add(2,3)endl;/编译期间编译器把内联函数直接插入到调用的位置,省略了运行期间函数调用的步骤举例说明/ 计算整型数和的Add()函数int Add( int a, int b )coutint Add( int a, int b )被调用!endl;return a + b;/ 计算浮点型数和的Add()函数float Add( float a, float b )cout float Add( float a, float b )被调用!endl;return a + b;int _tmain(int argc, _TCHAR*

28、argv)/ 因为参数是整型数int nSum = Add(2,3); / 调用int Add( int a, int b )cout 2 + 3 = nSumendl;/ 因为参数是浮点数float fSum = Add(2.5f,3.7f); / 调用float Add( float a, float b )cout 2.5 + 3.7 = fSumendl;return 0; 4.C+的面向对象类的声明一般在头文件中声明类的所有成员声明类的成员的属性声明所有接口(公共函数成员)的签名(格式)类的定义一般放在程序文件( .cc文件)中定义类的所有成员函数的具体实现方法对象是类的一个实例Pe

29、rson是一个class,它是一个数据类型somebody是一个对象,它是一个具体的变量类是一类对象的描述定义结构,可以声明许多变量定义类,可以声明许多对象l“struct”和“class”默认情况下用“class”声明的类成员是私有的private,而用struct声明的类成员是公有的。struct Person char name30;unsigned int age;char address100;float salary;void setName(char*);void setAge(unsigned int);void setAddress(char*); void setSalar

30、y(float);void disp( );void Person:setName(char* str) strcpy(name, str);void Person:setAge(unsigned int yr) age = yr;void Person:setSalary(float s) salary = s;void Person:setAddress(char* addr) strcpy(address, addr);void Person:disp( )cout Name: name endl;cout Age: age endl;cout Address: address endl

31、;cout Salary: salary endl;#include int main( )Person Jack = Jack, 30, Beijing China, 8000.0;Jack.disp( );Person somebody; somebody.setName( Lisa ); somebody.setAge( 20 ); somebody.setAddress( Toronto, Canada ); somebody.setSalary(6000.0); somebody.disp( );/仍然存在的问题仍然存在的问题#include int main( )Person Ja

32、ck = Jack, 30, Beijing China, 8000.0;Jack.disp( );Jack.salary = 1000.00;Jack.disp( );引入class类型对数据成员进行保护增加存取范围私有成员private保护成员protected公共成员publicclass Person /定义类来实现数据隐藏private:char name30;unsigned int age;char address100;float salary;public:void setName(char* str);void setAge(unsigned int yr);void se

33、tAddress(char *str);void setSalary(float yuan);void disp( );在C+中,class与struct的区别struct的缺省作用域为publicclass的缺省作用域为privateprivate的数据成员只能被类的成员函数所使用类的声明一般在头文件中声明类的所有成员声明类的成员的属性声明所有接口(公共函数成员)的签名(格式)类的定义一般放在程序文件( .cc文件)中定义类的所有成员函数的具体实现方法对象是类的一个实例Person是一个class,它是一个数据类型somebody是一个对象,它是一个具体的变量类是一类对象的描述定义结构,可以

34、声明许多变量定义类,可以声明许多对象class Teacherpublic : void prepareLesson(); void Teacher: prepareLesson() cout“老师备课。”prepareLesson();class Teacherpublic: Teacher(string strName) m_strName=strName;void prepareLesson();protected:string m_strName;private:;Teacher MrChen(“ChenLiangqiao”);或者 Teacher * pLiuwei=new Teacher(“Liuwei”);构造函数一种特殊的函数没有返回类型只能作为是公共成员只能用一个固定的名字,函数名就是类的名字构造函数只在建立对象的时候自动被调用一次构造函数必须是公共的,否则无法生成对象构造函数只负责为自己的类构造对象如果类没有声明构造函数,那么编译器会为该类生成一个默认的构造函数,该函数无参数,不做任何事情。 /用于处理一些对象在被销毁前的清理工作用于处理一些对象在被销毁前的清理工作如果没有显式的声明析构函数,编译器会为其产生

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论