您好,欢迎访问三七文档
C++的特点:1.支持抽象数据类型2.多态性,一个接口,多重算法,支持早期联编和滞后联编3.继承性,保证了代码复用,支持分类的概念一个c++程序由一个或多个函数构成,并且在这些函数中只有一个主函数main,它是程序执行的入口。C++程序严格区别字母的大小写。C++程序中的字符:(字符单位:0x00-0x7f范围内定义的ASC||码所表示的西文字符,每个ASC||码字符占用1个字节)1.标识符:标准c++标识符由字母、下划线和数字组成,且第一个字符不能为数字,长度一般不超过32个,文件只识别前8个字符。标识符大小写敏感。自定义标识符不提倡以下划线开始。2.关键字:又称保留字,具有特定含义。C++的基本数据类型:C++的数据类型分为两大类:基本数据类型和导出数据类型。基本数据类型:字符型(char)、整型(int)、单精度实型(float)、双精度实型(double)、布尔型(bool)和空类型(void)。Float可以保存7位有效数字,double可以保存15位有效数字。导出数据类型:数组、指针、引用、结构体、共用体、枚举和类。逻辑型也称布尔型,用来处理逻辑量。取值只有true(真)和false(假)两个,占1个字节,将非0值解释为真,将0值解释为假。变量与常量:(C++中有字符串常量,没有字符串变量。)变量三要素:变量名、变量的内存空间和变量的值。定义格式:数据类型变量名变量必须先定义后使用,变量确定类型后,编译器可以对变量参与的运算做合法性检查。变量赋值:1:变量定义后,用赋值语句赋初值。2:在定义变量时直接对变量赋初值,称为变量的初始化。注意:不能对文字常量赋值,不能对表达式赋值,常量不能重新赋值。文字常量:整型、实型、字符型、字符串型。(存储在代码区,不是通过地址进行访问。)实型常量在内存中以浮点形式存在。符号常量:(const)符号常量在使用前一定要首先声明。形式为:const数据类型说明符常量名=常量值;符号常量在声明时一定要赋初值,而在程序中间不能改变其值。运算符和表达式:算数运算符:对于除运算符,当两个运算量均为整数时为整除,商取整数,当至少有一个运算量为实数时,则为普通除。对于求余运算,要求运算量必须为整型数据。注意:计算时注意溢出问题!!!自增、自减运算符:i++表示先用i的值参加运算,然后再将变量i的值加1.++i表示先将变量i的值加1,然后再参加其他运算。自增、自减运算符只能作用于变量,不能用于其他。关系运算符(、=、、=、==、!=):关系运算符的优先级比算数运算符的优先级低,但比赋值运算符的优先级高。参加关系运算的两个操作数可以是任意类型的数据。当比较结果成立时,结果为true;当比较结果不成立时,结果为false.逻辑运算符(!、&&、||):非运算符(!)的优先级比算数、关系运算符的优先级高。与运算符(&&)和或运算符(||)的优先级比算数关系运算符的优先级低,但比赋值运算符级高。&&和||运算符具有短路的特性:对于&&,运行时先对第一个操作数求值,如果其值为false,则不再对第二个操作数求值;对于||,运行时先对第一个操作数求值,如果其值为true,则不再对第二个操作数求值。注意:1.在判断运算量的真假时,c++规定任何非0值表示true,0值表示false.2.C++在计算逻辑表达式时,从左向右扫描表达式,一旦能确定表达式的值,就不继续进行计算。位运算符:对整型数据的运算(二进制),符号位也参与运算。1.按位与(&):对应位都是1,则结果为1,否则为0.2.按位或(|):一个数的对应位为1,则结果为1;若两个数的对应位都是0,结果是0.3.按位异或(^):对应位不同结果为1,否则为0.4.按位取反(~):0变1,1变0.函数:声明函数时,形参表只要包含完整的类型信息即可,形参名可以省略。函数参数的传递方式:C++支持两种参数传递方式:值传递和引用传递。值传递是指当发生函数调用时,给形参分配内存空间,并用实参来初始化形参(直接将实参的值传递给形参)。这一过程是值的单向传递过程,一旦形参获得了值便与实参脱离关系,此后无论形参怎么改变,都不会影响实参。引用传递是一种特殊类型的变量,可以被认为是另一个变量的别名,通过引用名与通过被引用的变量名访问变量的效果是一样的。注意:声明一个引用时,必须同时对它进行初始化,使它指向一个已存在的对象,一旦一个引用被初始化后,就不能改为指向其他对象。引用可以作为形参,成为引用传递。内联函数在编译时将函数体潜入在每个调用处。内联函数应该是比较简单的函数,结构简单,语句少。形式:inline类型说明符函数名(含类型说明的形参表){语句序列}默认参数:C++允许定义具有默认实参的函数。这样在函数调用时,实参与形参的个数不同,默认参数也称为缺省参数。如果在函数调用中省略了函数实参,将把函数的缺省值赋给函数形参。缺省值的设定通常是在函数原型中给出。如果在程序中没有给出函数原型,那么缺省值可以在定义函数时给出。函数的缺省值应该在函数名出现最早的地方给出。注意:在函数调用中,第一个参数用缺省值,而第二个参数用指定值是错误的,如果一个参数具有缺省值,那么它右边的参数都要有缺省值。形参不一定都要有缺省值。参数的缺省值必须是常量,不能是变量。函数的返回值:注意:1.)一个函数可以有多个参数,但一个函数最多只能返回一个值,如果要从一个函数返回多个值,必须通过“打包”的方式,将这些值当作一个整体来处理。2.)如果一个函数的返回值不是void,那么该函数必须包含return语句。函数递归调用:对同一个函数的多次不同调用中,编译器会为函数的形参和局部变量分配不同的空间,他们互不影响。函数重载:两个以上的函数,具有相同的函数名,但是形参的个数或者类型不同,编译器根据实参和形参的类型及个数的最佳匹配,自动确定用哪个函数,这就是函数重载。重载函数的形参必须不同:个数不同或类型不同。编译器不以形参名和返回值来区分函数。不要将不同功能的函数定义为重载函数。局部变量和全局变量:内存存储区的分布:1.)代码区:存放程序的可执行代码。2.)全局数据区:存储静态变量和一般的全局变量,自动初始化为0。3.)栈区(一种先进后出的结构):存放局部变量,包括函数的形参、函数内定义的一般变量。分配栈区时,不处理原内存中的值。如果对变量不初始化,那么变量的初值不确定。4.)自由存储的堆区:存放与指针有关的动态数据,分配存储区时,也不清零。局部变量:局部变量包括函数的形参、函数内定义的变量、复合语句内定义的变量。由于局部变量具有一定的范围性,所以不同的函数可以定义同名的变量,但这些变量之间不会相互影响。全局变量:全局变量存放在全局数据区,如果定义时没有给出初值,则自动初始化为0.全局变量可定义在函数外的任何一个位置,其有效范围是从变量定义处开始到文件结束,都可以访问。如果程序的某个函数修改了全局变量,则其他函数都可见修改后的结果。如果一个函数内的局部变量和全局变量同名,那么对于函数来说只有局部变量是可见的,这称为全局变量的隐藏。要引用同名的被隐藏的全局变量,必须加上“::”局部变量与栈:当函数调用时,系统借助栈实现函数调用和局部变量的空间分配。变量的存储类别:auto(自动存储变量);register(寄存器变量)采用register修饰的变量将尽可能的存储在寄存器中,以提高程序的运行速度;register只能修饰局部的int型或char型变量,而不能修饰其他类型的变量;static(静态变量)初始化仅进行一次;extern扩展全局变量的作用域。将全局变量的作用域扩展到定义之前:在引用之前用关键字extern对该变量进行引用性说明。此声明不同于全局变量的定义,采用extern声明变量,应确保变量已经在其他地方定义过。用extern声明变量时,类型名可以省略。将全局变量的作用域扩展到其他文件:静态全局变量不能采用extern进行作用域扩展。类:定义类的语法形式:例子:Class类名称classclock{{Public:public:外部接口voidsettime(intnewH,intnewM,intnewS);Protected:private:保护型成员inthour,minute,second;Private:public:私有成员voidshowtime();};//注意分号。};注意:在类中可以只声明函数的原型,函数的实现(即函数体)可以在类外定义类的成员包括数据成员和函数成员。对类成员访问权限的控制属性有:公有属性(public),私有属性(private),保护属性(protected)。公有类型成员定义了类的外部接口,在类外只能访问类的公有成员;私有成员只能被本类的成员函数访问,来自类外部的任何访问都是非法的,如果私有成员紧接着类名称,则关键字private可以省略。一般情况下,一个类的数据成员都应该声明为私有成员。在类的定义中,具有不同访问属性的成员,可以按任意顺序出现。修饰访问属性的关键字也可以多次出现,但是一个成员只能有一种访问属性。在书写时通常习惯将公有类型放在最前面。声明对象:类名对象名;注意:对象所占据的内存空间只是用于存放数据成员,函数成员不在每一个对象中存储副本,每个函数的代码在内存只能够只占据一份空间访问数据成员:对象名.数据成员名调用函数成员:对象名.函数成员名(参数表)函数的原型声明要写在类体中,具体函数的实现是写在类定义之外的,函数实现具体形式:返回值类型类名::函数成员名(参数表){函数体}成员函数调用中的目的对象:调用一个成员函数需要使用“.”操作符之处调用所针对的对象(myclock.showtime():myclock就是这一调用过程中的目的对象。)。在成员函数中可以不使用“.”而直接引用目的对象中的数据成员。在成员函数中引用其他对象的属性和调用其他对象的方法时,都需要使用“.”注意:在类成员函数中,既可以访问目的对象的私有成员,又可以访问当前类的其他对象的私有成员。带默认形参值的成员函数:类成员函数的默认值一定要写在类定义中,而不能写在类定义之外的函数实现中。内联成员函数的声明:隐式声明和显式声明隐式声明:将函数体直接放在类体内。显式声明:用inline修饰,在函数实现时。构造函数和析构函数:构造函数的作用就是在对象被创建时利用特定的值构造对象,将对象初始化为一个特定状态,构造函数也是类的一个成员函数,构造函数的函名与类名相同,而且没有返回值。构造函数通常被声明为公有函数。只要类中有构造函数,编译器就会在建立新对象的地方自动插入对构造函数调用的代码。复制构造函数:复制构造函数的特性:其形参是本类的对象的引用。其作用是使用一个已经存在的对象(由复制构造函数的参数指定)。去初始化同类的一个新对象。声明和实现复制构造函数的一般方法:Class类名{Public:类名(形参表);类名(类名&对象名)……};类名::类名(类名&对象名){函数体}复制构造函数被调用的情况:1.当用类的对象去初始化该类的另一个对象时。2.如果函数的形参是类的对象,调用函数时,进行形参和实参的结合时。3.如果函数的返回值是类的对象,函数执行完成返回调用者时。析构函数:析构函数是对象在生存期即将结束的时刻被自动调用的,析构函数不接受任何参数。形式:~类名(){}没有返回值。类的组合:组合类构造函数定义的形式:类名::类名(形参表):内嵌对象1(形参表),内嵌对象2(形参表)……{类的初始化}构造函数的调用:(1.)调用内嵌对象的构造函数,调用顺序按照内嵌对象在组合类的定义中出现的次序,作用域:1.函数原型作用域:在函数原型声明时形式参数的作用范围就是函数原型的作用范围。在函数原型的形参类表中起作用的只是形参的数据类型,标识符并不起作用。2.局部作用域:函数形参列表中形参的作用域,从形参列表中的声明处开始,到整个函数体结束时为止。函数体内声明的变量,其作用域从声明出开始,一直到声明所在的块的大括号为止。3.类的作用域:对类的成员m的访问方式:(1.)如果在X的函数成员函数
本文标题:C++知识点总结
链接地址:https://www.777doc.com/doc-4613729 .html