您好,欢迎访问三七文档
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.#includeiostreamusingnamespacestd;标准库中的四个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();//吸收内存里的回车符12string对象的操作s.empty();若字符串为空,返回trues.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表达式返回了一个指向该对象的指针,对该对象的全部操作都要通过这个指针间接完成。
本文标题:c++基础教案
链接地址:https://www.777doc.com/doc-7027731 .html