如果要把类成员函数且返回值为声明为类的友元函数则应在类的定义中加入的语句答案解析成员函数作为另一个类的友元函数格式为返回类型类名函数形参下列程序段的输出结果是答案解析循环结构三个表达式的作用初始化循环判断条件和循环变量变化循环执行了三次的作用是计算的和类的方法返回查找到的字符串在主串的位置答案解析类对象方法的查不到字符串则返回循环执行次数是答案无限次解析是赋值运算符不是关系运算符且不等所以死循环控制格式输入输出的操作中函数是用来设置填充字符要求给出函数名和参数类型答案解析格式控制方法的使用如等等语言支持的两种多态性分别是编译时的多态性和的多态性答案运行时解析多态性包括静态的编译时多态性和动态的运行时多态性设函数是由函数模板实现的并且和都是正确的函数调用则函数模板具有个类型参数答案执行下列代码程序的输出结果是答案解析取子字符串第个参数表示要截取子串在字符串中的位置第个表示取多少个字符在面向对象的程序设计中将一组对象的共同特性抽象出来形成答案类解析类是相似特征的对象的抽象对象是类的一个实例定义类动态对象数组时元素只能靠自动调用该类的来进行初始化答案无参构造函数解析使用创建动态对象数组不能有参数所以只能调用无参的构造函数初始化对象已知有个元素类型向量若用初始化为向量语句是答案解析采用向量初始化另一个向量的形式12执行coutC13float和double类型的大小分别为4和814假定类AB中有一个公用属性的静态数据成员staticintbb在类外不通过对象名给该成员bb赋值为10的写法intABbb1015在面向对象程序设计中具有相同属性和服务的一组对象的集合称为类16一个C源程序按结构一般划分为三种文件分别是类说明文件类实现文件和类的使用文件17在已经定义了整型指针ip后为了动态得到一个包括10个整数的数组并由ip所指向应使用语句ipnewint1018类的私有成员只能被它的成员函数和友元函数访问19假定用户没有给一个名为AB的类定义析构函数则系统自动给出的缺省析构函数定义为AB20C类族中不能被派生类继承的有构造函数析构函数定义重载函数时应保证参数个数或参数类型有所不同21运算符重载仍然保持其原来的优先级结合性和语法结构22拷贝构造函数通常使用对象的引用来初始化创建中的对象23在OOP中多态是指同样的消息被不同对象接收时可产生不同的行为它通过重载和虚函数等技术来实现24定义模板的关键字是template25模板定义中标识类型的参数必须用关键字class或typename修饰26C的IO系统通过流的机制实现文件和控制台的输入输出操作27cin是输入流istream的一个对象处理标准输入cout是输出流ostream的一个对象处理标准输出28运算符只能用成员运算符来重载不能用友元运算符来重载29定义虚函数所用的关键字是virtual30类的继承是指子类继承基类的数据成员和成员函数31将指向对象的指针作为函数参数形参是对象指针实参是对象的地址值知识点结构体中非指针型成员的数据类型必须是已存在的类型指针型成员的基类型可放宽为自身或其后定义的类型结构体类型的数据占用连续内存依次存储成员整体存储量为其成员的存储量之和定义结构体变量的一般格式为标识符变量表在中结构体类型名可省略结构体变量的初值化与数组相似数据表中的数据被依次赋给成员未赋值的成员取同类型的数据如果成员自身是结构体或数组数据表中的相应数据可以是内嵌数据表结构体变量的整体使用有以下四种赋值结构体变量同类型结构体变量求存储量结构体变量取地址结构体变量初始化结构体成员名的使用格式有两种格式一结构体变量成员名格式二结构体指针成员名其中和统称成员运算均是左结合结构体成员可作为普通变量使用结构体成员的调用格式中有成员运算因此它参与运算或操作时要适当加括号结构体成员可与普通变量其它结构体的成员同名也可与其上下层结构体的成员同名元素为结构体的数组称作结构体数组以结构体为基类型的指针称作结构体指针它们的定义和使用与普通数组和普通指针基本相同共用体与结构体相似主要区别有定义共用体的保留字为同一共用体数据中各成员的基址相同整体存储量为其成员的存储量之最大者共用体中最后一次赋值的成员将覆盖之前赋值的所有成员因此只有最后一次赋值的成员有意义共用体变量初始化时数据表中只有一个数据或数据表它被赋给第一个成员定义枚举类型的一般语句格式和功能格式标识符枚举元素表变量表功能指定枚举类型名指定枚举元素的值定义枚举型变量第一个枚举元素的默认值为其它枚举元素的默认值为其前者加上述标识符和枚举变量表可缺省枚举元素属只读变量其值不可修改枚举型数据与型兼容存储量相同但是把数据赋给枚举变量需强制转换类型语句的一般格式和功能为格式数据类型名别名表功能给指定数据类型增加一组别名定义指针类型别名的格式为格式类型名别名别名定义数据类型别名的格式为格式元素类型名别名第维大小第维大小语句可在定义结构体共同体枚举类型的同时给它增加一组别名第章类和对象面向对象程序设计方法可简单地定义为以类为核心以对象为基本操作单元以消息传递为基本操作具有继承机制的程序设计方法面向对象中的对象是对具体客观事物的抽象包括属性抽象和行为抽象两个方面属性是对象的静态特征被抽象为成员变量又称数据数据结构等行为是对象的动态特征被抽象为成员函数又称操作运算功能方法算法等属性和行为是对象的两个要素对象是由其属性和行为组成的有机体把对象的数据属性和操作代码行为封装成相对独立的基本单位称作封装或封装性即对象数据结构算法类是具有相同属性和行为的一组对象的模板是一组对象的共性之抽象定义类的一般语句格式和功能为格式类名访问权限成员变量和成员函数对象表功能指定类名指定类中成员及其访问权限类的成员访问权限分为三种私有的不对外不可见公有的对外可见保护的仅对子类可见成员的默认访问权限是新规定的访问权限取代之前的访问权限定义类的关键字可改用后者规定成员的默认访问权限是定义对象的一般语句格式和功能为格式类名对象名实参表或对象功能创建指定对象并初始化注意省略全部实参时要连同一起省略由类创建对象称作类的实例化对象又称类的实例同类对象具有相同数据结构和操作类的成员可在类体外定义但必须在类体中作相应声明定义时必须在函数名前声明所在的类类名此称作作用域限定符类的成员函数只占一份存储空间同类对象其享成员函数对象只存储其成员变量访问对象中成员的一般格式为格式对象名公有成员变量名格式对象名公有成员函数名实参表格式对象指针公有成员变量名格式对象指针公有成员函数名实参表在定义类时其成员没有访问权限均可访问在定义类时当前对象的指针为未被形参屏蔽的成员可省略前缀对象与外界交流信息又称传递消息形式上表现为调用成员函数对象中的公用成员又称对外接口只要接口不变对类的内部修改不影响类外程序在定义类时通常把所有数据和不提供给外界使用的操作指定为私有的使它们在外界只能被公有的操作访问这种做法称作信息隐蔽或隐蔽性第章关于类和对象的进一步讨论构造函数是一个特殊成员函数从形式上说构造函数与类同名从机制上说构造函数在创建对象时被自动调用通常用于初始化对象每个类都有其构造函数无形参且函数体为空的构造函数可省略此时称作隐式构造函数类中的成员变量不占内存在定义类时不允许给成员变量赋初值对象的初始化有以下几种格式格式一类名对象名数据表功能把数据表中数据依次赋给对象的成员变量注意此格式要求成员变量均是公有的格式二类名对象名对象或类名对象名对象功能把右侧对象的成员变量依次赋给左侧对象的成员变量注意此格式要求右侧对象必须已存在且与左侧对象属于同一类格式三类名对象名初值表功能以初值表为实参调用构造函数构造函数返回一个该类对象其成员变量取构造函数结束时的值但是构造函数不允许定义返回值的类型不允许用带有返回值的语句调用构造函数不允许加前缀对象或对象指针构造函数应当定义为除非该类不创建对象定义构造函数可采用下述格式构造函数名形参及类型默认值表成员变量初值成员变量初值其中成员变量不允许重复函数允许同名称作函数的重载它们的形参个数或类型必须有所区别具体调用哪个函数由实参个数和类型确定构造函数也可重载允许指定函数形参的默认值调用时未指定实参的对应形参取默认值构造函数也如此构造函数的默认参数值必须在类体中指定声明带默认参数值的函数可省略形参名调用带默认参数值的函数时如果省略某个实参则其后实参必须全省因此如果定义函数时指定某个形数的默认值则必须指定其后所有形数的默认值析构函数是一个特殊成员函数从形式上说析构函数与类同名另加前缀从机制上说析构函数在释放对象时被自动调用通常用于释放相应内存析构函数不允许定义返回值的类型不允许用带有返回值的语句析构函数应当定义为除非该类不创建对象析构函数的函数体为空时可省略此时称其为隐式或空析构函数析构函数没有形参因此不能重载析构函数每个类只有一个析构函数通常先创建的对象后释放后创建的对象先释放相当于把对象放在一个栈中全局和静态局部对象只创建一次直到程序结束时才被释放关于对象数组有以下两条特殊规定必须指定数组中全部元素的默认值或初值用数据表给数组赋初值时数据被依次赋给对象中的第一个成员变量关于对象指针有以下两条特殊规定动态申请单个对象要求指定默认值或初值申请多元动态数组要求指定默认值成员函数指针的定义格式为函数值类型类名指针变量形参类型表成员函数名不是函数指针要加上取地址运算类名成员函数名成员函数指针的调用格式为类名指针变量实参表是类中的一个特殊指针它是由系统定义的指向当前对象自身在类定义中调用当前对象的成员可加前缀通常可省略常对象的定义格式和功能如下格式类名对象实参表对象实参表类名和可交换功能使该对象只能调用成员函数而且除了被声明为的成员变量外不允许修改对象中的其它成员变量常成员变量的初值必须在构造函数中用下述格式指定常成员变量初值表达式创建对象后不允许修改常成员变量的值它是具体对象中的常量而非整个类的常量在声明和定义成员函数时函数括号后均加上者称作常成员函数常成员函数只能修改被声明为的成员变量只能调用常成员函数定义指针变量时和变量之间插入者称作常指针变量简称常指针常指针必须在定义时给定其所指向的目标之后不允许修改不允许再指向别处如果常指针所指向的目标不是常变量则允许修改所指向的变量在基类型名前或后加上所定义的指针变量称作指向常变量的指针指向常变量的指针所指向的目标未必是常变量但是不允许用该指针去修改所指向的数据因此对于该指针来说它指向的是常变量常指针不允许修改自身的值常变量的指针不允许修改所指向的数据指向常变量的指针必须是常指针若实参是常变量则对应的函数形参必须是常变量动态建立对象格式类名对象个数格式类名格式类名初值表功能申请所需连续内存自动调用构造函数初始化对象返回基址后两种格式均是申请个对象的存储空间释放动态对象格式对象的指针格式对象的指针功能自动调用析构函数释放对象若对象内申请了动态内存则在析构函数中要有相应释放功能对象的赋值格式为目标对象源对象对象的复制格式为目标对象源对象对象的复制仅限于定义目标对象时即用源对象初始化目标对象对象的赋值和复制是成员变量间的对应赋值因此成员变量的数据类型均要支持自身类型的赋值定义成员变量时在类型名前或后加上所定义的成员变量称作静态成员变量静态成员变量被该类对象所共享只占一份内存隶属于类而非具体对象即使未定义对象它也占内存静态成员变量在程序运行之初分配内存直到程序结束时才被释放静态成员变量必须在类体外指定初值格式为类型名类名静态成员变量初值当初值为时可连同赋值号一起省略对于公有的静态成员变量的类外调用除了用对象或对象指针调用外也可附加类名调用格式为类名静态成员变量定义成员函数时在函数前加上所定义的成员函数称作静态成员函数静态成员函数没有默认的对象不接收指针不能直接访问非静态成员对于公有的静态成员函数的类外调用除了用对象或对象指针调用外也可附加类名调用格式为类名静态成员函数实参表友元分为友元函数和友元类友元函数可以是普通函数和成员函数声明友元的格式为声明友元函数函数声明声明友元类类声明友元的语句必须在类体中不区分权限友元函数和友元类中的成员函数可访问指定它为友元的类中私有成员友元不具有对称性和传递性类模板的定义格式为形参类模板名类体类模板的调用格式和功能为格式类模板名实参功能用实参对应替换类模板中的形参得到具体的类在类模板体外定义成员函数的格式为形参函数类型类模板名形参函数定义第章运算符重载重载双目运算符的一般定义格式为返回值类型运算符形参函数体其中当前对象是运算的左目形参是运算的右目函数体是运算的具体操作对于重载后的双目运算使用格式为左目运算符右目或对象运算符形参对象指针运算符形参重载单目运算符的一般定义格式为返回值类型运算符函数体其中当前对象是运算的右目函数体是运算的具体操作对于重载后的单目运算使用格式为运算符右目或对象运算符对象指针运算符运算符重载要遵守以下规则只能重载已有的运算符不能重载的运算符有个成员运算成员指针运算域运算存储字节运算条件运算符另外是一个双目运算符可重载重载运算符不能改变其目数因此不能指定重载运算符形参的默认值操作数的类型必须有所改变至少有一个是类类型另外重载不改变运算符的优先级和结合性有些运算符只能重载为成员函数或友元函数重载右和右的定义格式为返回值类型函数体返回值类型函数体其中是伪形参是类对象输入操作符又称流提取符它从输入流提取数据是类对象输出操作符又称流插入符它向输出流插入数据和均是双目运算作为输入输出操作只能重载为友元左元分别是对象和用户类用户类用单参数构造函数可实现其它类型数据到本类对象的转换此构造函数的定义和调用格式为定义构造函数被转类型形参转换规则调用构造函数被转数据把类的对象转换为基本类型需重载数据类型转换运算符只能重载为成员函数定义格式为基本类型名转换规则第章继承与派生继承又称派生被继承者称作父类或基类继承者称作子类或派生类派生类的定义格式为派生类继承方式基类继承方式基类派生类新增成员变量和函数父类的成员被子类继承后成为子类的成员这些成员称作派生成员派生类对象中派生成员变量的存储依照派生它的基类从左至右顺序存储之后为派生类新增成员变量派生成员变量新增成员变量继承方式有三种其中为默认继承方式从一个基类继承称作单继承从多个基类继承称作多重继承派生成员的访问权限有四种不可访问非派生成员只有前三种访问权限成员的类内和类外访问权限为不可访问类内访问可可可否类外访问可否否否基类成员的访问权限和派生方式决定了派生成员的访问权限基类中访问权限公有派生私有派生保护派生不可访问不可访问不可访问不可访问不可访问不可访问不可访问关于成员的访问权限有下述等价定义公有成员类外可访问不可访问成员类内不可访问私有成员类内可访问派生为不可访问保护成员类外不可访问派生为可访问派生类构造函数由两部分组成一是调用基类构造函数用于初始化继承部分二是初始化派生类新增部分派生类构造函数的一般形式为派生类名完整形参表基类名实参表基类名实参表派生类新增功能对于指定了形参默认值的基类构造函数基类实参表可以部分或全部省略全部省略等效于连同基类名一起省略基类构造函数体在派生类构造函数体之前执行释放派生类对象时基类析构函数在派生类析构函数之后自动执行因此派生类析构函数只需释放派生类新增的动态内存否则可能出错派生类也可派生子类形成多级派生子类之下的派生类称作间接派生类父类之上的基类称作间接父类当基类与基类或基类与派生类之间有同名成员时会引起二义性不包括重载成员函数应加前缀派生它的基类名来区分其中派生类新增同名成员可省略此前缀在基类的派生方式前或后加上则称它为派生类的虚基类简称虚基类对于同一个类一直以虚基类派生成员当它们被派生到同一个派生类时只派生为一个成员不重复派生如果虚基类的构造函数带参数而且没有指定默认参数值则其各级派生类均要调用这个虚基类构造函数基类对象与子类对象有以下兼容规则子类对象或指针可以向父类对象或指针赋值复制传递函数参数基类对象可以引用派生类对象类中的成员变量可以是另一个类的对象则称该对象是此类对象的子对象含有子对象的类称作组合类或复合类对象中有对象在组合类构造函数中应当初始化子对象组合类构造函数的一般格式为派生类名完整形参表子对象实参表第章多态性与虚函数多态性是指相同对象或不同对象收到相同消息会产生不同的行为一个接口多种方法简单地说多态性是由成员同名引发分为以下几种情况重载函数使得成员函数同名从基类继承了同名成员派生类中重新定义了与基类同名的成员多态性分为静态多态性和动态多态性静态多态性在程序编译时就能确定调用哪个成员又称编译时多态性动态多态性则在程序运行中动态地确定调用哪个成员又称运行时多态性附加声明的成员函数称作虚函数虚函数使得基类指针和引用可以调用各级派生类中新增的同名成员函数虚函数及相关操作的要点如下在基类中定义与拟调用成员函数同名参数个数和参数类型相同返回值类型相同的虚函数用基类指针指向派生类对象或基类对象引用派生类对象虚函数必须是成员函数不可重载成员函数不能声明为虚函数把构造函数声明为虚函数没有意义基类对象不能调用派生类新增成员函数派生类继承基类的虚函数派生类中屏蔽基类中虚函数者仍为虚函数如果基类的析构函数为虚函数则派生类的析构函数也为虚函数如果为基类指针动态分配了派生类对象组则基类析构函数应声明为虚函数否则释放基类指针所指向派生类对象时只调用基类析构函数不调用派生类析构函数没有函数体的虚函数称作纯虚函数含有纯虚函数的类称作抽象类纯虚函数的一般定义格式返回值类型函数名形参表纯虚函数没有函数体不能调用有别于函数体为空的虚函数纯虚函数被派生类继承为纯虚函数屏蔽纯虚函数者不再是纯虚函数变为普通虚函数抽象类不能创建对象但是可以定义抽象类指针在称为语句描述命题大于或小于的表达式为对嵌套语句的规定是总是与配对在中有二种参数传递方式值传递和一个程序总是从函数开始执行使用语句定义一个标识符常量时则必须对它同时进行表达式表示成增量表达式为函数重载依赖函数的三个特征参数类型参数个数及注释最近的没有与配对的地址传递初始化或者按照永恒星空说的写成不好意思时间长了概念有点模糊函数名称二填空题在语言中编程的单位是在语言中编程的单位是类是对具有共同属性和行为的一类事物的抽象描述共同属性被描述为类中的共同行为被描述为类中的类的具体表现是通过定义来操作的对类中的成员函数和属性的访问是通过和这个关键字来控制的一般情况下按照面向对象的要求把类中的数据成员属性定义为权限而把成员函数方法定义为权限在类定义中数据和成员函数默认权限是类中构造函数有个析构函数有个类中的构造函数是一个特殊的成员函数它由类的对象调用它的作用是在定义类的对象时程序将自动调用该对象的函数初始化对象自身在撤销类的对象时程序将自动调用该对象的函数运算符对指定类型对象动态分配内存并返回运算符删除题中的运算符所动态分配的内存空间假定用户没有给一个名为的类定义构造函数则系统为其定义的默认构造函数形式为假定用户没有给一个名为的类定义析构函数则系统为其定义的默认析构函数形式为在类中定义和实现的函数称为非成员函数应声明为类的才能访问这个类的成员若要把类定义为类的友元类则应在类的定义中加入语句若要把函数定义为类的友元函数则应在类的定义中加入语句函数类数据成员成员函数成员函数个或者个个生成时初始化构造函数析构函数或者设置为返回二填空题最低级别的优先运算符是运算符该运算符组成的表达式运算的结果为的值的注释符为标识符命名之前要指定标识符使用的结构化程序的基本结构包括结构分支选择结构和结构流的操纵符中数值数据采用十六进制操纵符为数值数据采用八进制操纵符为在子函数定义中函数直接或间接调用自身称为调用该调用过程分为和两个阶段内嵌函数在函数定义符加关键字在编译时将内联函数每一函数调用处程序的开始处子函数和主函数之前定义的变量是其作用域为类名为的声明中构造函数的成员函数名为结构函数的成员函数名为二填空题最低级别的优先运算符是逗号运算符该运算符组成的表达式运算的结果为最右端的值的注释符为或者标识符命名之前要指定标识符使用的数据类型结构化程序的基本结构包括顺序结构分支选择结构和循环结构流的操纵符中数值数据采用十六进制操纵符为数值数据采用八进制操纵符为在子函数定义中函数直接或间接调用自身称为递归调用该调用过程分为递推和回归两个阶段内嵌函数在函数定义符加关键字在编译时将内联函数展开函数体每一函数调用处程序的开始处子函数和主函数之前定义的变量是全部变量其作用域为程序全局类名为的声明中构造函数的成员函数名为结构函数应该是析构函数的成员函数名为