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

下载本文档

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

文档简介

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

温馨提示

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

评论

0/150

提交评论