




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VC+语法知识汇总第2章 运算符基本成份 关键字:由小写字母组成;标识符:运算对象名,由字母、数字和下划线组成,不能以数字开头、不能是关键字,大小写严格区分;运算符:, +, = =等表示指定运算;常量:具体的数据;串:用双引号括起来的字符序列;特殊符号:, , /, #, (, )等。1常量整型:十进制;八进制(0开头,由07组成);十六进制(0x开头,由09和AF组成)实型:小数形式(由09和小数点组成);指数形式(尾数e指数,尾数和指数必须有值,指数为整数)字符型:单引号引起的单个字符或转义序列,转义序列由开头,后跟对应字符的ACSII码(用八或十六进制数表示,默认为八进制数)或字符标识符常量(符号常量)的定义方法:编译预处理指令 #define 标识符常量名 常量值常量说明符 const 类型 标识符常量名=常量值;2变量变量在使用前,必须有值。说明格式:存储类型 数据类型 变量名1 , 变量名2, , 变量名n; 变量说明时直接赋初值:存储类型 数据类型 变量名=值;变量先说明后赋值:存储类型 数据类型 变量名;变量名=表达式;3运算符与表达式(1)算术运算符:+、*、/(除)、%(求余) %只对整数操作,/和%的除数(右操作数)不能为0(2)关系运算符:、=、=(相等比较)、!=(不等比较) 操作数非0为真、 0为假;运算结果真为1、假为1,且继续参加运算。(3)逻辑运算符:!(非)、&(与)、|(或) 运算规则:非真即假,&运算时操作数中有一个为0(假)时为假,|运算时操作数全为0(假)时为假;括号优先,同层的优先顺序为!、&、|,从左到右,一旦能确定结果值,停止运算。(4)赋值运算符:=、+=、-=、*=、/=、%=等 左操作数必须为变量;先计算右操作数;i*=j+2等价于i=i*(j+2)(5)自增自减运算符:+、- - 操作数为变量,运算符的位置会影响两个值(前置:表达式为运算前的变量值,变量自增自减1;前置:变量自增自减1,表达式为运算后的变量值)(6)逗号运算符:, 从左到右依次计算各操作数,最后一个操作数的值为表达式的值。(7)条件运算符:?: 操作数1的值为真(非0),表达式取操作数2的值,否则表达式取操作数3的值。优先级:一元运算(一个操作数),二元运算(算术运算、关系运算、逻辑运算,赋值运算),条件运算,逗号运算4类型转换自动转换:一般表达式中向数据长度增加的方向转换;赋值表达式向左操作数类型转换。强制转换:(type)表达式或type(表达式);只改变表达式的值的类型。第13章 VC程序的结构1程序的基本结构#include /预处理部分 /说明部分(全局变量说明部分、自定义函数说明),可以无void main(void) /主函数说明 /函数体,说明部分、操作部分(一般由输入、处理和输出三部分组成) 程序中严格区分字母大小写;中文符号只能出现在字符串或注释中;采用缩格式。2输入cin变量1变量2 变量n;注意:变量类型可以是整型、实型和字符型;键盘输入的数据之间要用空格或回车隔开;数据的类型、顺序、个数与列举的变量对应一致;当接受到类型不致时,对应变量值为0,以后的输入数据丢失、变量无值;当个数不足时,等待继续输入;当个数超过时,取所需个数的数据,多余的由后面的输入接收或自动放弃;cin.get(字符型变量名);注意:每次从输入行中接受一个字符(包括空格和回车符)到指定变量中;3处理各种语句(说明语句、表达式语句、流程控制语句、空语句、复合语句)的集合。每个语句均以“;”结束;复合语句是多个语句用括起组成的一个语句。4输出cout表达式1表达式2 表达式n; 注意:先计算表达式的值,再输出结果;表达式中的运算符的优先级必须高于,否则要将表达式用圆括号括起;当表达式为字符(串)常量时,输出引号里的内容,如果串中含有转义字符时,输出对应的ASCII字符;连续输出的表达式的值,如果需要间隔,则必须人为增加输出分隔符;也可以使用setw(整数)规定其后一个输出项的宽度,但要在预处理部分加预处理指令#include 。第4章 流程控制语句1分支语句(1)单分支语句if1)if (表达式) 语句;if (表达式) 语句1; 语句2; 执行流程见图1。 图1 图2注意:表达式的值非0或条件成立为真,否则为假。2)if (表达式) 语句1;else 语句2;执行流程见图2,其中语句1和语句2均或为复合语句。3)if (表达式1) 语句1; else if (表达式2) 语句2; else if (表达式3) 语句3; else 图3 语句4;执行流程见图3。 (2)多分支语句switchswitch (表达式) case 常量表达式 1: 语句序列1; break; case 常量表达式 2: 语句序列2; break; case 常量表达式 n: 语句序列n; break; default: 语句序列0;执行流程为: 1)计算switch后的表达式的值。 2)将该值依次与case后的常量表达式的值进行比较,等值时,执行其后的语句序列,当执行到break语句时,switch执行结束,否则继续执行后面的case中的语句。 3)如果该值未在case后出现,若有default,则执行其后的语句,否则结束。注意事项: 1)switch后的表达式的结果必须是整型、字符型或枚举类型; 2)case后的常量表达式的值必须是整型、字符型或枚举类型的常量,不能是变量表达式(即不能含有变量)(3)分支语句的嵌套在if语句的嵌套中,要注意else与if语句的匹配原则:else与之前同一层未配过对的if进行配对。2循环语句(1)while语句while (表达式) 语句;执行流程见图4。 图4 图5注意: 循环体可以是单一语句或复合语句(用括起),其中必须有改变表达式(循环条件)值的相关语句,且能最终使表达式(循环条件)为假。(2)do-while语句do 语句; while (表达式) ;执行流程见图5。注意: 1)while后的;不能缺少。 2)while与do-while的区别:while的循环体可以不执行,而do-while的循环体至少执行1次;while先判断后执行,do-while先执行后判断。(3)for语句for (表达式1;表达式2;表达式3) 语句;执行流程见图6。注意: 1)表达式1只执行一次,用于初始化循环控制变量。2)表达式2在每次准备循环前执行,为循环控制条件。3)表达式3在每次循环后执行,用于更新控制变量的值。4)各表达式均可省略,表达式2省略表示循环条件成立,其他表达式省略,则为空。 图6(4)循环嵌套执行流程:从外循环进入,外循环一次,内循环执行一遍。注意: 1)可以使用continue提前开始下一轮循环;使用break中断循环。2)continue和break只影响包含它的最内层循环。第5章 函数1函数定义类型 函数名(参数1,参数2,) 功能语句系列; return (表达式); 注意:(1)参数的定义形式为:类型 形式变量名 (2)每个参数要分别定义,中间用“,”分隔。 (3)形式变量的使用范围为函数体内,不需要给初值,由函数调用时给定。 (4)函数名前的类型省略时,默认为整型。当函数名前的类型为非void时,函数体中至少要有一条return语句。 (5)return后表达式值的类型若与函数名前的类型不一致时,以函数名前的类型为准。 (6)函数不能嵌套定义。2函数调用函数表达式:函数名(实际参数表) 注意:(1)实际参数的个数、顺序、类型都是由形参决定,但实参使用的是已经存在的变量、常量或表达式。 (2)有返回值时,函数表达式可出现在一般表达式中。无返回值时,直接加“;”构成表达式语句。 (3)当定义在调用后面时,在调用前必须进行函数说明,说明的格式为:函数的首部加“;”。其中的形式参数名可以省略。(4)参数值的传递方式有:值传递、地址传递和引用传递。值传递:实参将值单向传递给形参,函数中对形参的操作,在离开函数后,形参不复存在,实参的值保持不变。(即实参和形参各自占有空间,值的传递为单向)地址传递:实参向形参传递的为地址,函数中对形参地址中的内容操作,在离开函数后,该地址中的内容仍然存在。引用传递:实参和形参共享空间(形参为实参的别名)3函数的嵌套调用:在调用一个函数的过程中,那个函数又调用另一个函数。函数的递归:一个函数在调用的过程中直接或间接地调用了自己。执行流程:从主函数进入,当遇到函数调用时,转向被调用的函数执行,执行结束后,返回到原调用点继续执行。4函数重载:定义多个同名函数,调用时,根据提供的实参个数或类型顺序决定所调用的函数。注意:(1)定义重载函数的原则是重载的函数在参数上要与原函数有所区别,即参数个数不同,或参数的类型顺序不同。 (2)函数重载在编译时实现程序的静态多态性。5函数的缺省参数注意:(1)如果函数定义在后,则在原型说明时给了缺省值后,函数的定义时就不可再给缺省值。 (2)只有带缺省值的参数在函数调用时才可以省略;没有缺省值的参数,函数调用时必须给出实参。 (3)如果函数定义时的参数有多个,且只有部分参数有缺省值,应将缺省参数依次位于参数的最右边。6内联函数在函数定义的前面加inline7作用域(1)块作用域 局部变量,同一个块内不允许两个标识符同名,但不同块中的两个标识符可同名。且内层的标识符屏蔽外层块的同名标识符。(2)文件作用域 全局变量,若有同名的局部标识符,则在同名局部标识符的作用域内缺省使用的是局部标识符,但仍可以通过作用域运算符“:”来使用具有文件作用域的同名标识符。(3)函数作用域 语句标号,goto中使用;无“先说明后使用”的限制,也不无块的限制;作用范围在函数内部。(4)函数原型作用域 作用范围在函数原型说明语句。8存储类型(1)auto 局部变量,一旦离开作用域,该变量就不再存在。(2)static 局部静态变量:作用域为块作用域,在离开其作用域时,变量仍然存在,且其值不变,但暂时不可使用,下一次函数调用时在其作用域内可以再次使用,其值延续以前的变量值。更重要的是,对于静态局部变量,仅在首次遇到说明语句时为其分配存储空间并赋初值。一般用于用户自定义函数中。全局静态变量:在说明全局变量时如果加上static,其变量仅在本程序文件中使用,在其它程序文件中不可使用。可以避免在多个文件组成的程序中变量的重名问题。 (3)register 使用CPU中的寄存器作为变量空间存放数据。(4)extern 外部变量一定是全局变量,属于静态存储类型。有两种情况必须使用外部变量,第一种情况:在同一源程序中定义的全局变量,属于先使用后定义的,在使用之前要声明该变量为外部类型变量;第二种情况:与static全局变量相对应,当在一个源程序文件中要使用其它文件中说明的全局变量时,要用extern先对变量进行声明。 9编译预处理特点:1)以#开头标识。 2)每一条预处理指令各占一行,不是以分号结束。 3)在编译源程序之前进行。(1)文件包含格式为:# include 文件名 或 # include 注意:(1)文件名为文件名的全称,若非系统缺省目录,应指明文件路径。系统缺省目录有两种:包含系统指定的专用包含文件目录中的文件 “”指定。扩展名通常为“.h”;当前目录(用户源程序所在的目录)下的文件用双引号指定。 (2)一条包含命令只能包含一个文件。(2)宏定义1)不带参数的宏 格式: # define 宏名 字符序列注意: 宏名(标识符)通常用大写字母表示,以区别于普通变量。 区分字符串(用双引号)或数值的宏定义形式,且字符串中与宏名相同的字符串不作为宏名对待。 在进行宏扩展时,只对宏名作简单的替换,不进行计算。 终止宏的定义 # undef 宏名 2)带参数的宏 格式: # define 宏名(参数列表) 字符序列注意: 参数列表中不能指定类型。 宏名与括号之间不能有空格。 宏代换只是对参数作简单的替换而不做任何计算。 宏定义通常在一行内定义完,并以换行符结束,不可与其它语句同行编写;当一个宏定义多于一行时,必须在换行前先输入一个转义符“”。(3)条件编译# ifdef 宏名 程序段 # end if10程序的多文件组织多文件组织的程序,可以通过三种方法实现:(1)在含有主函数的文件中用#incude 命令将不同的文件包含进来,再对含有主函数的文件进行编译处理。(2)将各源程序单独编译成目标程序,然后作连接处理。(3)使用工程文件的方法,将各源程序文件都添加至一个工程项目中,由编译器自动处理。程序的多文件组织,需遵守以下原则:1)要使用其它文件定义的函数或变量,使用前要再以extern进行说明。2)如有不想让其他程序文件使用的函数和变量,则用static修饰的函数或变量限于本源程序文件内使用。 第6章 数组1数组的定义1)一维数组 数据类型 数组名元素个数; 2)二维数组 数据类型 数组名行数 列数;注意: 元素个数(行数、列数)必须为一个大于零的整型常量,不可为有变量的表达式或变量。 数组必须先定义后使用,在使用前各元素必须有确定的值。2数组的初始化数组元素的初始化方法: (1)以集合形式给出所有元素的值。(二维,先行后列取值)(2)以集合形式给出部分元素(不能多于元素个数)的值(二维以行为单位),其余元素的值则分别被赋0。 (3)可以在定义数组时不限定数组元素个数(二维只能不限定行数),而由给出的元素个数来确定数组的大小。 (4)如果定义的数组为全局类型或静态类型,则数组各元素有缺省的初值0(字符型数组元素缺省初值为0)。3数组的使用 一般数组(非字符数组)是面向元素的,不可直接对数组名进行输入、处理和输出。(1)数组元素的使用 一维 数组名下标二维 数组行下标列下标注意: 数组的下标可以是一个表达式 下标表达式值的类型必须是一个整数 下标表达式的值应大于或等于0,且小于数组定义时的大小值 数组元素作为函数实参时,为值传递方式。(2)数组名的使用 注意: 数组名可以看作常量,值为存放数组元素的空间首地址,只能使用,其值不能被改变。 一般用于函数的实参,为地址传递方式,对应的形参定义形式同数组定义(元素个数可以省略), 作为函数的实参时,函数体中对数组操作时要注意下标不能越界。4字符数组(1)定义:char 数组名常量表达式;char 数组名常量表达式1常量表达式2;(2)字符数组的初始化 用字符串对字符数组初始化,可以不指定数组大小,通过字符串的大小确定数组的大小,但系统会给字符数组自动增加一个字符串结束标志0。(3)字符数组的使用 可直接对数组名进行输入、处理和输出。输入:cin数组名;或cin.getline(数组名,数组长度); 后一种方式可接收空格。输出:cout、=、next=p;(3)链表结点插入将结点p插入至一个结点p0和结点p1之间的操作: p-next=p1; p0-next=p;注意:顺序不能颠倒。(4)链表结点删除1)找到要删除的结点p;2)有三种情况: 删除的结点是首结点(p= =head),则将第二个结点的首地址作为新的链首地址返回;head=p-next; 删除的结点是链尾(p-next= =NULL),则原最后第二个结点成为新的链尾。p0-next=NULL; 其他:将要删除的结点的前一结点p0的next指针指向要删除结点的后一个结点p1(p-next)。 p0-next=p-next; 说明:后两种情况处理操作相同,可以作为一种进行处理。3)由于链表的结点利用的是动态内存,删除结点时要释放被删除结点的动态内存。 delete p;(5)链表删除从链首结点head开始,逐个删除结点(p=head; head=head-next; delete p;),直到head为NULL。(6)链表遍历从链首结点开始,逐个访问结点。p的初值为head,下一个结点为p=p-next。注意:在链表操作中,只要用new申请的空间,一定要用delete进行释放。第9章 面向对象1类与对象的概念类:数据与处理这些数据的函数的封装体。可理解为用户定义的一种类型,系统不分配空间。对象:类的一个实例,是动态产生和动态消亡的。可理解为具有类类型的变量,有存储空间。对象对消息的处理是通过激活对象内相应的函数实现。2类的定义class 类名 private: 成员名表1; /定义私有成员 public: 成员名表2; /定义公有成员 protected: 成员名表3; /定义保护成员注意:(1)在类体中未明确指定成员的访问权限时,系统约定为私有成员。(2)私有成员只允许在该类中的成员函数中使用;公有成员不仅允许在该类中的成员函数中使用,还允许在类外通过“对象.成员”方式使用;保护成员允许在该类的成员函数中使用,也允许在该类派生类的成员函数中使用,不允许在类外使用。(3)在类定义中,可以仅给出成员函数的原型,但成员函数的定义必须在类体外给出定义。类体外定义一个类的成员函数的一般格式: 类型 类名:函数名(参数表) /类型为函数返回值的类型 /函数体(4)在类中的任何成员数据均不能使用关键字exert、auto或register限定其存储类型。(5)在定义类的数据成员时不能对其初始化(定义类不为类分配存储空间)。3类与结构体的区别唯一区别:在类体中未明确指定成员的访问权限时,系统约定为私有成员。在结构体中未明确指定成员的访问权限时,系统约定为公有成员。4对象的说明与使用(1)说明对象的方法: 1)先定义类的类型,再说明对象;2)在定义类的同时说明对象;3)直接说明对象,而不定义类的类型注意:在定义对象时,允许对公有成员数据进行初始化,但不允许对私有成员数据或保护成员数据进行初始化。(2)对象的使用1)成员的访问 公有成员:对象.成员;私有成员和保护成员只能通过对象的公用成员函数来获得。2)同类型的对象之间可以整体赋值。3)对象可以象一般变量使用,在作函数的参数时,属于赋值调用。第10章 构造函数和析构函数构造函数的作用:初始化对象的成员数据(私有的、保护的和公有的)以及其他初始化工作。析构函数的作用:在撤消对象前做结束工作,即收回对象所占用的存储空间。1定义构造函数在类定义中定义构造函数:类名(形参表) 在类定义中给出构造函数说明,在类体外定义:类名: 类名(形参表) 注意:(1)由系统自动调用。(2)定义时函数名与类同名,不能指定函数返回值的类型,也不能指定为void类型。(3)可以不带参数,也可带多个参数,也可指定参数的缺省值(当全部指定或无参时为缺省构造函数)。(4)构造函数的个数为1n个(1:不定义或只定义一个时;1时属于构造函数的重载) 缺省构造函数的个数为0个(定义非缺省构造函数)或1个(三种情况之一:不定义,由系统自动产生;定义无参的构造函数;定义所有参数都有缺省值的构造函数)。(5)若定义的类要说明该类的对象时,构造函数必须是公有的成员函数。(6)产生对象时,自动根据参数选择调用构造函数。(7)转换构造函数是带有一个参数的构造函数,用来把参数转换为构造函数所在类的对象。(8)当转换构造函数中的参数为对象的引用时,则为拷贝构造函数。2当类中有对象成员时的构造函数的定义 新类(参数表0):成员1(参数表1),成员2(参数表2),成员n(参数表n) 注意:(1)参数表0必须提供各对象成员参数表中的参数及初始化新类的非对象成员所需的参数(2)构造函数的调用顺序:对象成员所属类的构造函数(按对象成员说明的顺序依次调用),自己的构造函数3定义析构函数类名:类名() / 函数体注意:(1)由系统自动调用(2)一个类有且只有一个析构函数(由用户自定义或系统自动生成)(3)析构函数没有返回值也不能带参数(4)析构函数不允许重载、不可以继承(5)析构函数的调用顺序与构造函数的顺序相反第11章 继承与派生1继承(利用已有的数据类型定义出新的数据类型)在继承关系中,被继承的类称为基类或父类,而通过继承关系定义出来的新类则被称为派生类或子类。1)单继承(一个派生类从一个基类派生)class 派生类名:访问方式 基类名 /基类必须已存在 派生类中的新成员; 2)多重继承(一个派生类从多个基类派生)class 派生类名:访问方式 基类名1,访问方式 基类名2 派生类中的新成员;2访问方式即继承方式,可以为public、private或protected,如果省略,则默认为private。1)公有继承基类中public和protected成员的访问属性在派生类中不变(派生类中的其他成员可以直接访问它们),而基类private成员不可访问。在派生类的外部只能通过派生类的对象访问从基类继承来的public成员。而无论是派生类的成员还是派生类的对象都无法访问从基类继承来的private成员。2)私有继承基类的public和protected成员被继承为派生类的private成员,派生类中的其他成员可以直接访问它们,但在派生类的外部无法通过派生类的对象访问它们。而无论是派生类的成员还是派生类的对象都无法访问从基类继承来的private成员。3)保护方式基类的public和protected成员被继承为派生类的protected成员,派生类中的其他成员可以直接访问它们,但在派生类的外部无法通过派生类的对象访问它们。而无论是派生类的成员还是派生类的对象都无法访问从基类继承来的private成员。3派生类构造函数的定义派生类名:派生类构造函数名(参数表):基类名1(参数表1),基类名2(参数表2) /派生类构造函数的函数体其中,第1个参数表中的参数包含了其后的各个参数表中的参数。1)派生类构造函数执行的一般次序为:(1)调用基类构造函数,调用顺序按照它们被继承时说明的顺序(从左到右),而不是按派生类构造函数在初始化表中的次序;(2)调用对象成员的构造函数(如果在派生类中存在对象成员的话),调用顺序按照它们在类中说明的顺序;(3)执行派生类构造函数的函数体。2)当派生类的对象被撤销时,派生类的析构函数被执行,执行顺序是先执行派生类的析构函数,再执行基类的析构函数,其顺序与执行构造函数的顺序正好相反。4虚基类在派生类的对象中,同名成员在内存中同时拥有多个拷贝,有两种分辨方法,一是使用作用域运算符唯一标识并分别访问它们;二是将直接基类的共同基类设置为虚基类。1)使用作用域运算符方法在需要访问的成员名前加上直接基类名和作用域运算符“:”。其格式是:直接基类名:数据成员名 或直接基类名:成员函数名(参数表)2)虚基类的方法将直接基类的共同基类设置为虚基类,即在基类的访问方式前加上关键字“virtual“,声明虚基类的格式如下:class 派生类名:virtual 访问方式 基类名 /声明派生类成员 ;虚基类虽然被一个派生类间接地多次继承,但派生类却只继承一份该基类的成员,这样就避免了在派生类中访问这些成员时的二义性。3)虚基类机制下的构造函数的执行顺序虚基类机制下的构造函数的执行顺序与一般多重继承下的构造函数的执行顺序是不同的,其执行顺序如下:(1)一个类的所有直接基类中,虚基类的构造函数在非虚基类之前调用;(2)如果一个类的所有直接基类中有多个虚基类,则这些虚基类的构造函数的执行顺序与在派生类中的说明的次序相同;(3)若虚基类由非虚基类派生而来,则仍然先调用基类构造函数,再按照派生类中构造函数的执行顺序调用。第12章 其他特性1虚函数1)多态性:同样的消息(对类的成员函数的调用)被类的不同对象接收时导致的完全不同的行为的一种现象。2)两种多态:编译时的多态(静态多态、通过函数的重载在静态联编实现);运行时的多态(动态多态、通过虚函数在动态联编实现)。3)多态性的实现:(1)声明虚函数:在基类中的成员函数原型前加上关键字virtual。(2)在派生类中对虚函数重新定义功能(原型不变)(3)在主函数中,定义指向基类的指针使之指向派生类的对象(4)使用基类指针调用派生类对象的成员函数(虚函数)4)说明: (1)虚函数可以在一个或多个派生类中被重新定义,但它要求在派生类中重新定义时必须与基类中的函数原型完全相同,包括函数名、返回值类型、参数个数和参数类型的顺序。 (2)只有类的成员函数才能声明为虚函数,但类的构造函数以及全局函数和静态成员函数不能声明为虚函数。 (3)只有虚函数通过继承才能实现多态性,否则基类指针仅能访问派生类中的基类部分。5)纯虚函数: virtual 类型 函数名(参数表)=0; 声明了纯虚函数的基类只是用于继承,仅作为一个接口,具体功能在其派生类中实现。6)抽象类(类中声明了纯虚函数或构造函数为非公有)抽象类只能用作基类来派生新类,而不能用来创建对象。2静态成员(静态成员是所有对象公有的。静态成员分为静态数据成员和静态成员函数)1)静态数据成员:在类中定义的方法是在该成员的前面加上关键字static.说明:(1)静态数据成员是类的所有对象共享 (2)静态数据成员所占的空间不会随着对象的产生而分配,也不会随着对象的消失而回收。 (3)必须对类的静态数据成员进行初始化,其初始化语句应写在程序的全局区域中,并且必须指明其数据类型与所属的类名,初始化格式: 类型 类名:变量名=值; (4)访问公有静态数据成员:“对象.成员函数”或 “类名:静态数据成员名” (5)访问非公有静态数据成员:只能由成员函数内访问,不能在类外访问2)静态成员函数(在成员函数前面冠以static关键字) 说明:(1)只能访问类的静态数据成员,而不能访问类中的其他非静态成员 (2)在类的外部调用类中的公有静态成员函数,使用“类名:静态成员函数()”,不能通过对象名调用公有静态成员函数。在类的外部不能调用类中的私有静态成员函数。3友元函数(友元的作用是提高了运行效率,但又破坏了类的封装性)1)友元函数的定义在类的定义中加以声明,声明时只需在友元的名称前加上关键字friend,其格式如下: friend 类型 函数名(形式参数);说明:(1)函数可放在类体中的任何位置,也可放在类体外(如普通函数) (2)友元函数是可以直接访问类的私有成员的非成员函数。是定义在类外的普通函数,不属于任何类。调用方法也普通函数相同。 (3)一个函数可以是多个类的友元函数,不过需要在各个类中分别声明2)友元类当希望一个类可以存取另一个类的私有成员时,可以将该类声明为另一类的友元类。定义友元类的语句格式:friend class 类名;类名必须是程序中的一个已定义过的类。例如,以下语句说明类B是类A的友元类: class A public: friend class B; /B是A的友元类 ; 经过以上说明后,类B的所有成员函数都是类A的友元函数,且能存取类A的私有成员和保护成员。注意:(1)友元关系不具有对称性,即如果类B是类A的友元类,并不隐含类A是类B的友元类。 (2)友元关系不具有传递性,即如果类B是类A的友元类,而类C是类B的友元类,这并不隐含类C是类A的友元类。第13章 运算符重载1运算符重载:重新定义运算符的功能(不改变运算符的优先级、结合性、操作数个数)2重载的定义1)重载为类的成员函数,格式为: 返回值的类型 类名:operator(形参表) /是需要被重载的运算符 /函数体,重新定义运算符在指定类中的功能 2)重载为类的友元函数,格式为: friend 返回值的类型 operator(形参表) /函数体,重新定义运算符在指定类中的功能 3说明:1)不可重载的运算符:?: : . * sizeof()2)“=”、“()”、“”和“-”等运算符不能重载为友元函数3)当运算符重载为类的成员函数时,函数的参数个数比原来的运算对象少一个(当前对象为左操作数;+和后置时有一个int参数作为与前置运算符的区别
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 精美的古风课件
- 2025年麻醉科常用镇痛药物选择模拟测试卷答案及解析
- 世界粮食日宣传周活动简报
- 公司工作纪律培训
- 辅警培训法律知识简报课件
- 2025年3D打印技术的生物医学材料
- 农业银行2025盘锦市信息科技岗笔试题及答案
- 交通银行2025迪庆藏族自治州数据分析师笔试题及答案
- 农业银行2025通化市秋招群面案例总结模板
- 交通银行2025泸州市秋招笔试性格测试题专练及答案
- 2025至2030中国漂白粉行业发展研究与产业战略规划分析评估报告
- 2025福建漳州闽投华阳发电有限公司招聘52人考试参考题库附答案解析
- 农药包装废弃物培训课件
- 2025年事业单位招聘考试卫生类护理学专业知识试卷(护理文书)
- GB/T 45859-2025耐磨铸铁分类
- 监狱警察心理健康讲座
- 设计后续服务管理办法
- 政府单位消防培训课件
- 培训部门介绍
- 2025至2030中国预测性维护行业项目调研及市场前景预测评估报告
- 全国省市电子表格
评论
0/150
提交评论