c++考研复试问题整理_第1页
c++考研复试问题整理_第2页
c++考研复试问题整理_第3页
c++考研复试问题整理_第4页
c++考研复试问题整理_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C++面向对象程序设计第一章:c++的初步知识1.C语言和c++的区别?C语言是结构化和模块化的语言,它是面向过程的。在处理较小规模的程序时,使用c语言极为方便。但是当问题规模较复杂时,c语言便显得较为吃力。C++保留了c语言的所有优点,并增加了面向对象机制,具有类、封装、继承、多态等特性,在开发较大规模程序时可以明显提高软件开发效率。2.#define与const在c语言中常用#define指令在定义符号常量,这样定义是在预编译时进行字符置换,在预编译后,程序不再有PI这个标识符。PI不是变量,没有类型,不占用存储单元,且容易出错。C++中提供const定义常变量,它具有变量的属性,有数据类型,占用存储单元,有地址,可用指针指向它,只是在程序运行时变量值不变,且不能改变。3.什么是函数模板?建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代替,这个通用函数就称为函数模板。声明:template<typenameT>4.什么是“引用”?引用又称别名,引用的作用是为一个变量再起另一个名字,以便在需要时可以间接引用该变量。对一个变量的“引用”的所有操作,实际上都是对其原来的变量的操作。在声明引用时,必须对其初始化。注:引用不是独立的变量,不单独分配存储单元。5.值传递和引用传递的区别?值传递将实参的值传递给形参,形参是实参的一个拷贝;引用传递是将实参的地址传给引用型形参,这时形参和实参是同一个变量6.什么是内置函数?调用函数需要一定的时间,如果有些函数需要频繁使用,则累计所用时间会很长,从而降低程序的执行效率。C++中可以通过在函数左端添加关键字inline,使程序在编译时将所调用的函数代码直接嵌入到主调函数中,从而减少运行时间,提高运行速度,这便是内置函数。7.new/delete和malloc/free在软件开发中,常常需要动态分配和撤销内存空间。c语言中使用malloc/free,在使用malloc函数时必须指定需要开辟的内存空间的大小,(格式:malloc(size)),此外malloc函数只能从用户处知道应开辟空间的大小而不知道数据的类型,因此无法使其返回的指针指向具体的数据。C++中使用new/delete,(格式:new类型[初值]),使动态分配空间更加方便。第二章:类和对象的特性对象:客观世界的实体。每个对象均由数据和函数组成,数据即属性,函数用来对数据进行操作,以便实现某些功能。封装:①将有关的数据和操作代码封装在一个对象中,形成一个基本单位,各个对象间相互独立,互不干扰。②将对象中某些部分对外隐蔽,只留下少数接口,方便与外界联系,接收外界消息。抽象:将有关事物的共性归纳、集中的过程,表示同一类事物的本质。(类是对象的抽象,对象是类的实例)继承:多态:由继承而产生的派生类,其对象会对同一消息不同的反应。1.面向对象设计和面向过程设计的区别?面向过程设计的围绕功能进行的,一个函数实现一个功能,所有数据都是公用的,程序设计者必须考虑每一个细节,即什么时候对什么数据进行操作。(组成:程序=算法+数据结构)面向对象设计是围绕对象进行的,将数据和有关操作封装成一个个对象,程序设计者只需考虑如何设计类和对象以及怎样向有关对象发送消息即可。(组成:程序=对象1+对象2+…+消息)2.类和对象的关系类是对象的抽象,而对象是类的具体实例。(类/对象相当于结构体类型/结构体变量)类是抽象的,不占用内存;对象是具体的,占用存储空间。3.C++中类和结构体的异同C++语言在编写时为了兼容c,对结构体的功能进行了扩展,使结构体类型也具有封装的特点,用struct声明的结构体类型实际上也是类。区别:1(关键)用struct声明的类,如果对其成员不做私有和公有的声明,则默认为公有;而用class定义的类,如果对其成员不做公有和私有的声明,则默认为私有。2结构体的执行效率要比类高。3结构体没有析构函数,类有析构函数。4结构体不能继承,类可以继承4.成员函数的存储方式?一个对象所占的空间大小只取决于该对象数据成员所占的空间,而与成员函数无关。函数的目标代码存储在对象空间之外,供不同的对象调用。(c++设立了this指针用来指向不同的对象)第三章:怎样使用类和对象1.构造函数的作用?构造函数用来处理对象的初始化,不需要用户来调用它,而是在建立对象时自动执行,且只能执行一次。构造函数的名字必须与类名同名,不能任意命名。它不具有如何类型,不返回任何值。一个类中可以定义多个构造函数,以便为对象提供不同的初始化方法,这些构造函数具有相同的名字,而参数个数或类型不同。(重载)2.析构函数的作用?析构函数的作用是在撤销对象占用的内存前完成一些清理工作,使这部分内存可以被分配给新对象使用。在对象生命周期结束时自动执行。无返回值,无函数类型,无函数参数,不能被重载。一个类只能有一个。3.什么时候调用构造函数和析构函数?①全局对象:构造——在本文件模块中所有函数执行前调用;析构——mian函数执行完毕或调用exit函数。②局部对象:构造——建立对象时调用;析构——函数调用结束或对象释放时。③静态局部对象:构造——第一次调用此函数定义对象时调用一次;析构——mian函数执行完毕或调用exit函数。4.指向对象成员函数的指针三方面匹配:①函数类型和参数个数;②函数返回值类型;③所属类;(格式:指针变量名=&类名::成员函数名)5.常对象:(格式:const类名对象名[(实参表)])——只能调用其常成员函数,不能调用普通成员函数。怎样保证常对象数据成员的值不会改变?——不能调用常对象中的普通成员函数+常成员函数不能修改对象的数据成员。常数据成员:只能通过构造函数的参数初始化表对常数据成员进行初始化,任何其他函数都不能对常数据成员赋值。常成员函数:(格式:类型名函数名(参数表)const)——只能引用本类中的数据成员,而不能修改它们。指向对象的常指针:(格式:类名*const指针变量名)——指向不变指向常对象的指针:(格式:const类型名*指针变量名)——常变量只能用指向常变量的指针来指向它,不能通过指针改变变量的值。6.静态成员static静态数据成员:在程序编译时被分配空间,程序结束时释放;在所有对象之外单独开辟空间,为所有对象所共有;只能在类体外初始化。静态成员函数:是类的一部分而不是对象的一部分,与任何对象无关。如果要在类外调用公用的静态成员函数,要用类名和域运算符::。没有this指针,只能用来访问静态数据成员,而不能访问非静态成员。7.友元友元函数:如果在类以外的其他地方定义了一个函数,在类体中用friend对其进行声明,该函数极为友元函数。可访问类中私有成员。友元类:若A是B的友元类,则A可访问B内所有成员。特点:单向且不能传递。优:有利于数据共享,提高程序效率。弊:破坏封装性。第四章:对运算符进行重载1.什么是运算符重载?对运算符进行函数重载,是指定的运算符不仅能实现原有的功能,而且能实现在函数中指定的新的功能。(格式:函数类型operator运算符名称(形参表){处理…})好处:c++程序设计的重要基础是类和对象,通过运算符重载,可以使现有的运算符直接应用于类对象,提供的很大的方便。2.重载运算符的规则?1不允许定义新的运算符,只能对现有运算符进行重载。2重载不能改变运算符运算对象的个数。3不能改变运算符优先级别。4不能改变运算符的结合性。5不能有默认参数。6重载的运算符其参数至少应有一个是类对象。3.运算符重载方式?1将运算符重载的函数作为类的成员函数(有this指针,可少写一参数);一般用于单目运算符。2将运算符重载函数作为友元函数;一般用于双目运算符。4.转换构造函数只有一个形参,用于将一个其他类型的数据转换成一个类对象。格式:类名(指定类型的数据){…}5.类型转换函数将一个类对象转换成另一类型的数据。只能作为成员函数。格式:operator类型名(){转换语句…}第五章:继承与派生类的继承:一个新类从已有的类那里获得其已有属性。派生类是基类的具体化,而基类是派生类的抽象。1.继承方式?1公用继承基(public/protected)→派(public/protected)基(private)→派(private)2私有继承基(public/protected)→派(private)基(private)→派(private)3保护继承基(public/protected)→派(protected)基(private)→派(private)2.派生类析构函数调用顺序?自身→子对象→基类3.虚基类若一个派生类有多个直接基类,而这些直接基类又有一个共同的基类,则在最终的派生类中会保留多份间接共同基类的同名成员,这是没有必要的。为此,产生了虚基类,使在继承间接共同基类时只保留一份成员。(class派生类名:virtual继承方式基类名)4.继承与组合类的组合:在一个类中以另一个类的对象作为数据成员。建立成员类与组合类的关系;“有”的关系;横向。类的继承:建立派生类与基类的关系;“是”的关系;(eg:白猫是猫);纵向。第六章:多态性与虚函数多态性:向不同的对象发送同一个消息,不同的对象在接收时会产生不同的行为。1.多态性的分类?静态多态性:通过函数重载实现。由函数重载和运算符重载形成的多态性属于静态多态性,要求在编译时就知道调用函数的全部信息,因此在程序编译时系统就能决定要调用的是哪个函数。优:调用速度快、效率高;缺:缺乏灵活性。动态多态性:通过虚函数实现。不在编译时确定调用的是哪个函数,而是在程序运行过程中才能动态确定操作所指向的对象。2.什么是虚函数?在基类中声明函数是虚拟的,并不是实际存在的函数,然后在派生类中才正式定义此函数。用来解决动态多态问题,在程序运行期间,用指针指向某一类派生类对象,这样就能调用指针指向的派生类对象中的函数,而不会调用其他派生类中的函数。(同一类族中不同类的对象,对同一函数调用做出不同的响应)作用:运行在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来访问基类和派生类中的同名函数。3.函数重载和虚函数的区别?函数重载处理的是同一层次上的函数同名问题,而虚函数处理的是不同派生层次上的函数同名问题;同一类族中的虚函数首部是相同的,而函数重载时函数的首部是不同的(参数个数或类型不同)4.什么是纯虚函数?纯虚函数时在声明虚函数时被初始化为0的函数。只有函数名没有函数体,不能被调用。(他只是告诉编译系统:“我在这里声明一个虚函数,等到派生类里再定义”)作用:在基类中为其派生类保留一个函数的名字,以便派生类根据需要对其定义。格式:virtual函数类型函数名(参数列表)=0;5.什么是抽象类?不用来定义对象而只作为一种基本类型用作继承的类。凡是包含纯虚函数的类都是抽象类。作用:为一个类族提供一个公共接口。(注:若派生类中未对所有纯虚函数进行定义,则其依然是抽象类)8.c和c++的区别:c语言面向过程,重点在于算法和数据结构;c++是面向对象语言,它是c语言的继承,既可以进行c语言的面向过程程序设计,又可以进行面向对象的程序设计,具有类、封装、继承、多态等特性。9.什么是内联函数?调用函数时需要一定的使劲,若有些函数需要频繁使用,累计所用时间会很长,从而减低程序执行效率。通过在函数左端添加关键字inline,使程序在编译时将所调用的函数代码嵌入到主调函数中,从而减少运行时间,提高运行速度,这便是内联函数。10.面向对象和面向过程的区别:面向过程是一种以过程为中心的编程思想,用一个函数实现一个功能,所有的数据都是公用的,程序设计者必须考虑每一个细节,什么时候对什么数据进行操作。组成:程序=算法+数据结构;面向对象是一种以对象为中心的编程思想,将数据和有关操作封装成一个对象,程序设计者只需要设计所需的各种类和对象以及考虑怎样向有关对象发送消息,以完成所需的任务即可。组成:程序=对象s+消息。11.值传递和引用传递的区别:值传递传递的是一个值的副本,函数对形参的操作不会影响实参的值;引用传递传递的对象的内存地址,函数对形参的操作会影响实参的值,实参的值会随着形参的值的改变而改变。12.类和结构体有什么区别?C++在编写时为了兼容c,于是向结构体添加了功能,使其也具有类的特点,用struct声明的结构体类型实际也是类,但两者之间依然存在差别。1用struct声明的类,若对其成员不做私有和公有的声明,系统将其默认定义为public,而用class定义的类,默认为private;②结构体的执行效率要比类高;③结构体没有析构函数,类有析构函数;④结构体不可以继承,类可以继承。13.引用与指针的区别?1引用无需解引用,指针需要解引用。2引用在定义时被初始化一次,之后不可变,指针可变3引用不能为空,指针可以为空4程序为指针变量分配内存区域,而引用不需分配内存区域。14.什么是静态函数和静态变量?静态数据成员在编译时就创建并初始化:在该类的如何对象建立之前就存在,不属于任何对象,而非静态成员变量则属于对象所有。类静态数据成员只有一个拷贝,为所有此类的对象所共享。15.Const1Const修饰类的成员变量,表示成员常量,不能被修改2Const修饰函数承诺在本函数内部不会修改类的数据成员,不会调用其它非const成员函数3如果const构成函数重载,const对象只能调用const函数,非const对象优先调用非const函数4Const函数只能调用const函数,非const函数能调用const函数5类体外定义的const成员函数,在定义和声明处都需要const修饰符16.面向对象三大特性?1封装:实现面向对象程序设计的第一步,封装就是将数据与函数等集合在一个个单元中,我们称之为类。2继承:继承主要实现重用代码,节省开发时间,子类可以继承父类的一些特性。3多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。17.什么是虚函数和纯虚函数?基类指针可以指向其公有派生类对象,但当用基类指针访问其指向的派生类对象时,只能访问该派生类从基类中继承来的方

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论