c++基础教案

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1目录第一节c++概述第二节函数第三节类和对象第四节友元和重载第五节模板第六节继承2第一节c++概述main()函数标准输入输出流exit语句数据类型标准库string类型引用类型指针和const限定符动态内存分配31.1main()函数intmain(){……return0;}每个c++程序必须含有main()函数,且main函数是唯一被操作系统显式调用的函数定义函数必须制定4个元素:返回类型、函数名、形参表、函数体。操作系统通过main的返回值来确定程序是否成功执行完毕,返回0表示程序成功执行完毕,通常非0表示有错误出现41.2标准输入输出流C++没有直接定义进行输入/输出的任何语句,这个功能由标准库iostream.h提供。包含两个类:输入流istream和输出流ostream.#includeiostreamusingnamespacestd;标准库中的四个IO对象cin标准输入(如键盘),为istream对象cout标准输出(如显示屏),为ostream对象cerr标准错误,用于输出警告和错误信息,为ostream对象clog用于产生程序执行的一般信息,为ostream对象5cin读入流(由键盘输入)作用从键盘取得数据送至内存,与一起使用结合方向为自左向右例如:intv1,v2;cinv1v2;从流中读取信息时,输入流缓冲指针跟踪最后一个读入到流的字符,每次尝试从流获取信息时,都从指针的当前位置开始cin自动跳过空白字符(whitespace)返回值为左操作数6用cout写入到流(输出到屏幕)cout必须与输出操作符一起使用,结合方向为自左向右例如:coutEntertwonumbersendl;coutdecx;(hex/oct)作用将右操作数插入到cout中,可同时接受不同类型的数据输出,所以可有多个操作符,把信息写入流时,把信息添加到流的末尾,相当于从左到右输出endl(endofline)为操纵符,具有换行效果,并刷新与设备相关联的缓冲区,刷新后用户可立即看到写入到流中的输出。注:忘记刷新可能会造成输出停留在缓冲区,建议在程序员调试过程中,这些语句都应刷新输出流iomanip.h中,setw(n):为后面的输出项预留n列71.3exit()语句形式:exit(interger_value);执行exit语句时,程序立即终止。一般来说,如果因为一个错误而调用exit,就使用1,其他情况使用0。该函数在头文件cstdlib中,所有要有预编译命令#includecstdlibusingnamespacestd;81.4内置数据类型常量宏常量:#definePI3.1415926系统不为其分配内存,只是简单的字符串替换const常量:const类型常量标识符=值;常量定义后不能修改,所以必须初始化例如:constdoublePI=3.1415926;系统为PI分配内存单元两种常量的比较const常量有数据类型,而宏常量没有数据类型;编译器可以对const常量进行类型合法性检查,而对宏常量仅仅是字符的替换,没有合法性检查,并且在字符替换的时候可能产生意想不到的错误c++中,const常量完全可以取代宏常量9布尔类型bool,它的值只有两个true和false可以将算术类型的任何值赋给bool对象。0代表false非0代表true初始化:创建对象并给它赋初值(赋值指擦除对象的当前值并用新值代替)有两种形式:复制初始化:用等号intval=1024;直接初始化:初始化式放在括号中intval(1024);通常在一个对象首次使用的地方定义该对象101.5标准库string类型#includestringusingnamespacestd;string对象的定义和初始化strings2(s1);//s1为string对象或字符串字面值strings3(n,'c');//s3为n个c注意:字符串字面值和标准库string类型不是同一类型string对象的读写输入:cins;//从第一个非空字符读至下一个空白字符读入一行getline(cin,line);两个参数:输入流对象和string对象功能:从输入流的中读取内容到line中,换行符是该行的结束标志注:getline()不忽略开头的换行符,但line并不保存换行符,即若开头遇换行符,line为空string输出:coutsendl;11#includeiostream#includestringusingnamespacestd;intmain(intargc,char*argv[]){stringstr;coutInputastringendl;cinstr;//输入str的时候,只要遇到了空格,就会结束输入coutstrendl;coutInputalineusinggetlineendl;getline(cin,str);coutstrendl;return(0);}在用getline()之前已经用cinstr;输入了一次回车,这个语句遇到回车就结束,这样,回车符也跟着到了内存,到用getline()再输入时,内存里第一个字符就是回车,所以getline()一读到这个回车就结束了,所以getline(cin,str);不起作用。解决:处理掉cinstr;遗留的回车符,可以在该语句下加一句:getchar();//吸收内存里的回车符12string对象的操作s.empty();若字符串为空,返回trues.size();返回s中字符的个数s[n];返回s中位置为n的字符s1==s2;比较,所有的比较运算符都可以使用s1+=s2;连接s1=s2;赋值,string类型可以和字符串字面值连接,赋给string类型,但是,+操作符的左右操作数必须至少有一个string类型strings=hello+,+s1;×131.6引用类型引用就是对象的另一个名字,主要用于函数的形参引入voidswap(inta,intb){inttemp=a;a=b;b=temp;}intmain(){intx=10,y=20;………swap(x,y);}形参与实参有各自不同的内存空间,若实参是一个复杂对象,重新分配内存会引起程序执行效率大大下降形参对实参为值传递,对形参的任何改变不会引起实参值的改变141.6.1非const引用引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。声明:类型标识符&引用名=目标变量名;inta;int&ra=a;//定义引用ra,它是变量a的引用(别名)(1)&在此不是求地址运算,而是起标识作用。(2)声明引用时,必须同时对其进行初始化。(3)引用声明完毕后,相当于目标变量名有两个名称,不能再把该引用名作为其他变量名的别名。(4)声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元。故:对引用求地址,就是对目标变量求地址。&ra与&a相等。15非const引用intival=1024;1.引用必须在定义时初始化,int&refval=ival;一旦绑定到某对象不可以将引用int&refval1;×绑定到另一对象int&refval2=refval;×2.不能定义引用类型的引用,int&ref1=4;×必须用与该变量同类型对象初始化int&ref2=ival+5;×3.引用对应的值必须具有相应的内存空间,以便对这个空间进行引用。常量、表达式、引用不能赋给引用例:inti=5;intj=6;int&k=i;k=j;//k和i的值都变成了6;161.6.2const引用格式:const类型标识符&引用名=目标变量名;用这种方式声明的引用,不能通过引用对目标变量的值进行修改,从而使引用的目标成为const,达到了引用的安全性。inta;constint&ra=a;ra=1;//错误a=1;//正确引用型参数应该在能被定义为const的情况下,尽量定义为const。17对const对象的引用constintival=1024;inti=34;constint&refval=ival;refval=512;×int&ref2=ival;×constint&ref3=42;constint&ref=i;constint&ref4=ref3+3;refval是对const型的引用,所以任何对refval的赋值都是非法const对象必须用const引用const引用可以绑定到相关的类型的对象,或绑定到右值181.6.3指针和引用的比较指针和引用都可间接访问另一个值,但是1、引用总是指向某个对象,定义时必须初始化。指针则可以在任何时候被初始化2、引用一旦被初始化,就不能改变引用的关系而指针则可以随时改变所指向的对象3、赋值:引用即为别名,给引用赋值修改的是该引用所关联的对象的值(非const引用)而指针可以更改其指向的对象,也可以更改所指向的对象的值4、不能有NULL引用,引用必须与合法的存储单元关联,而指针则可以是NULL191.7指针和const限定符使用const修饰指针时,由于const的位置不同,而含意不同。1.7.1指向const对象的指针指向const的指针,不可以通过该指针修改对象,但可以其他方式修改doubledval=3.14,pi=3.1415;constdouble*ptr=&dval;//const限定了指针所指的对象类型,非ptr*ptr=3.1415;//不合法指针所指的对象不能改ptr=π//合法,指针值可变dval=3.1415;//合法20若一个指针是指向const对象,则该指针必须具有const特性。例如constdoublepi=3.14159;constdouble*ptr=π//正确double*ptr1=π//错误,const对象要用指向const的指针来指向,这样可以保证既不能通过*ptr,也不能通过pi修改其值指向const的指针常用作函数的形参,这样可以确保函数的实参在函数调用过程中不被修改voiduse_ptr(constint*p){……}211.7.2const指针固定指向一个对象的指针,即指针本身是常量char*constptr1=stringptr1;//const放在类型说明和变量之间ptr1=stringptr2;//非法,指针本身的值不可改变*ptr1=m;//合法指针所指的变量的值可以改变若指针及指针所指向的变量的值都不可以更改constchar*constptr=stringptr;221.8动态内存分配一内存分配有三种方式1.从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。2.栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。3.堆,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由我们决定如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。231.8.2单个对象的动态分配与释放动态分配:由关键字new及其后面的类型指示符构成。该类型指示符可以是内置类型或class类型。例:newint;从堆中分配了一个int型的对象。newStudent;分配了一个Student类对象。需要注意的是堆中分配的对象没有名字。new表达式返回了一个指向该对象的指针,对该对象的全部操作都要通过这个指针间接完成。

1 / 139
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功