考研C++复试题目整理

您所在的位置:网站首页 c语言考研复试题 考研C++复试题目整理

考研C++复试题目整理

#考研C++复试题目整理| 来源: 网络整理| 查看: 265

C++复试题目自整理 大家觉得有用点点赞啊可以升级升到3级我就可以自定义标签了谢谢~

说复试题目过于牵强,只是自己整理的一些知识点而已,为了便于理解和背诵,有些部分定义和说明尽量简明扼要,如有错误请多多指教!(不可转载)

1.面向对象的三个基本特征

封装:通常认为封装是把数据和方法隐藏起来,对数据和方法的访问只能通过已定义的接口。面向对象的本质就是将现实世界描绘成一系列完全自治、封闭的对象。我们在类中编写的方法就是对实现细节的一种封装;我们编写一个类就是对数据和数据操作的封装。可以说,封装就是隐藏一切可隐藏的东西,只向外界提供最简单的编程接口 继承:在现有类的基础上扩展新的类的过程,子类可以共享原有类的属性和方法,还可以添加新的特征。可提高代码的可重用性; 多态:不同的对象对同一信息会产生不同的结果;所谓消息是指对类的成员函数的调用,不同的行为是指不同的实现,也就调用不同的函数。换言之,多态指的就是用同样的接口访问功能不同的函数,从而实现“一个接口,多种方法”。 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么;

2.C++如何实现多态性

C++实现多态性: 静态多态性:是通过函数的重载来实现的,由函数重载和运算符重载形成的多态性属于静态多态性,在系统编译时系统就知道要调用哪个函数,又称编译时的多态性。 动态多态性:在编译时不确定调用的是哪个函数,而是在程序运行过程中动态地确定操作所针对的对象,又称运行时的多态性(通过虚函数实现) Java实现运行时多态性主要通过重写、重载和接口三种主要实现方式。 多态的优点:1.增强了代码的重用性和灵活性;2.同一参数类型;3.同一功能调用;4.降低耦合性。

3.构造函数与析构函数

构造函数:主要用于定义对象时进行初始化工作;与类名相同没有返回值,可以没有参数也可以带有多个参数 析构函数:用于在对象的生命周期结束时,进行善后工作。 拷贝构造函数:用一个已有的对象对新对象进行初始化时,会调用拷贝构造函数。主要用于当类中有指针数据成员时,需要自己定义拷贝构造函数解决复制过程中段错误的产生。

4.什么是const,作用是什么?

Const修饰,实际上就是将对应的可读写性改成了只读性。靠近谁就修饰谁。 1.定义变量 变量的值在其生命周期内不能改变,用multable修饰变量就能改变。 2.定义指针 主要分为三种情况:不能修改指针指向的值,不能修改指针的值,两者皆不能修改。 3.定义函数形参 形参在函数中不会被改变 4.定义对象 在定义对象,对象中所有数据成员的值不能改变; 在定义数据成员,则该数据成员不能被改变; 定义成员函数,则只能引用本类中的数据成员,不能修改它们。 对于类的成员函数,有时候必须指定其返回值为const类型,以使得其返回值不为“左 值”。

5.const与define的区别

宏定义只是对值进行简单的替换,不进行类型检查;而const有具体的类型,在编译阶段会进行类型检查。 #define宏是在预处理阶段展开,而const常量在编译运行阶段 。 const定义的常量在程序的运行过程中只有一份拷贝;而#define定义的常量在内存中有若干个拷贝 。 const效率高,因为编译器通常不为普通const常量分配内存,而是保存在符号表中,没有了存储与读取的操作,效率很高。

6.static作用有以下两个:

Static:用static修饰的内容在内存中独立存储,优先于对象产生,属于类而不属于任何一个对象,可以被类中的对象所共享。 1.规定内容的作用区域,就是内容所在的函数或类,只有在该函数/类才能调用。 2.规定内容的生命周期,内容在函数/类执行完毕后不会被回收,会一直保留,直至程序结束

7.静态数据成员与静态成员函数

静态数据成员:静态数据成员是可以被类中所有对象共享的数据成员,静态数据成员只能在类体外进行初始化,在所有对象之外单独开辟空间,在编译时为其分配空间,在结束时释放空间,既可以通过对象名引用,也可以通过类名引用。 静态成员函数:在类定义中,有static修饰的成员函数称为静态成员函数,它不属于任何一个特定的对象,一般来说静态成员函数访问的一般是静态数据成员或全局变量,不能访问普通数据成员。可以通过类名或对象名两种方法访问。可以用它在建立任何对象之前处理静态数据成员。 对象成员:一个类中的数据成员是其他的对象,称为对象成员。首先它是一个类,其次是另一个类的成员

封闭类:有其他类的对象作为 成员对象的类叫封闭类。 封闭类对象生成时,先执行所有对象成员的构造函数,然后才执行封闭类的构造函数。

8.静态数据成员与全局变量的不同

全局变量可以被任意的类或函数调用,静态数据成员只能在其所用范围(类中)被调用。

9.为什么引入友元的概念?

类中的私有成员只能通过它的成员函数来访问,有时候需要在类的外部访问类的私有成员,所以就需要一种途径,在不放弃私有成员安全性的情况下,使得类外部的函数或类能够访问类中的私有成员,就引入了友元的概念,友元是一扇通向私有成员的后门。

10.什么是友元函数?

友元函数:由friend关键字修饰,不是当前类的成员函数,而是独立于当前类的外部函数,它可以访问该类的所有对象的成员,包括公有成员和私有成员。友元函数一般是带有一个该类的入口参数,因为友元函数不是类的成员函数,不能直接引用对象成员名,必须通过入口参数传递进来的参数名或对象指针来引用该对象的成员。 友元函数通过直接访问对象的私有成员提高了程序运行的效率,但是破坏了数据的隐蔽性,降低了程序的可维护性,与面向对象思想不符。

11.友元成员函数

除了一般的函数可以作为某个类的友元外,一个类的成员函数也可以作为另外一个类的友元,这个成员函数不仅可以访问自己所在类对象中的私有成员和公有成员,还可以访问friend声明语句所在类对象中的私有成员和公有成员。

12.友元类

一个类可以成为另外一个类的友元。当一个类被声明为另一个类的友元时,它的所有成员函数都成为另外一个类的友元函数,这意味着友元的类中所有成员函数都可以访问另一个类中的私有成员。

13.函数重载

函数重载:对一个已有的函数赋予其新的含义,使其具有新的功能。简单来说就是一名多用(函数名相同参数不同)。

14.运算符重载

运算符重载的方法是定义一个重载运算符的函数,使制定的运算符不仅能实现原有的功能,还能够在其基础上进行了扩展。也就是说,运算符重载是通过定义函数来实现的,运算符重载实质上是函数的重载。 Operator+运算符名称

15.运算符重载函数的使用

1.一种是作为类的友元函数进行使用 2. 一种是作为类的成员函数进行使用

16.重载运算符的规则

1.C++不允许用户自己定义新的运算符,只能对已有的进行重载; 2.C++不能对 .(成员访问运算符), *(指针访问运算符), ::(域运算符),sizeof(长度运算符),?:(条件运算符)共5个; 3.重载不能够改变运算符的目数 4.重载不能改变运算符的优先级 5.重载不能改变运算符的结合性 6.重载运算符的函数不能有默认的参数

17.为什么要使用继承

设计一个新类的时候可以继承父类的成员,减少设计类的冗余开发,从而较好地解决代码重用的问题。继承,派生指的是传递关系,继承是站在子类的角度说的,派生是站在父类的角度说的。 从继承方式分: public(公有的):父类中私有成员子类不可访问,公有及保护成员在子类中保持原有访问状态。 private(私有的):父类中私有成员子类不可访问,公有及保护成员为子类中的私有成员(即只能通过子类内的成员函数访问)。 protect(保护的):父类中的私有成员子类不可访问,公有及保护成员为子类中的保护成员。

18.保护成员的作用

(1)在不涉及到派生的时候,私有成员和保护成员地位一样,在类内可以访问,类外不可以访问。 (2)在涉及到派生时,父类中的私有成员无论怎么样的派生方式,在子类中都是不可见的,有时我们想让父类中的私有成员在子类的成员函数中使用,可以将父类中的私有成员声明为保护成员,父类中的保护成员在子类中是可见的可用的。

19.多重继承

多重继承:一个派生类有两个或多个基类。多重继承要注意防止出现二义性。 多重继承中,派生类的构造函数只负责对其直接基类初始化,再由其直接基类对间接基类初始化。当存在虚基类时,在最后的派生类中还需要对虚基类初始化。

20.虚基类及其作用

引入虚基类的原因:如果一个派生类有多个直接基类,而这些直接基类又有一个共同基类,则最后的派生类中会保留其直接基类所继承的共同基类的多份同名成员,而引用这些同名的成员时,必须在派生类对象名后增加直接基类名以免产生二义性。占用大量的存储空间,易出错。 将共同基类设置为虚基类,这样从不同派生类继承来的同名数据成员在内存中就只有一个拷贝,同名函数也只有一种映射。 为了保证虚基类在派生时只被继承一次,应当在该基类的所有直接派生类中声明为虚基类,否则仍然会出现对基类的多次继承。

21.派生类的构造函数和析构函数的构造规则

(1)当基类的构造函数没有参数或没有显示的定义构造函数是,那么派生类可以不向基类传递参数,可以不定义构造函数。 (2)当基类含有带参数的构造函数时,派生类必须定义构造函数,一提供把参数传递给基类构造函数的途径 当派生类中有对象成员时,执行派生类构造函数的顺序是: 1.调用基类构造函数,对基类数据成员初始化 2.调用对象成员构造函数,对对象数据成员初始化 3.调用派生类构造函数,对派生类数据成员进行初始化 执行析构函数顺序与之相反

22.组合与继承

类的组合:在一个类中以另外一个类作为数据成员,称为类的组合。 继承是纵向的,组合是横向的。通过继承建立了派生类和基类之间的关系,是一种“是”的关系,比如“白猫是猫”;派生类是基类的具体化实现,是基类中的一种。组合是“有”的关系,比如“老师有生日这个属性”。

23.多态

不同的对象对同一消息会产生不同的行为结果。所谓消息是指对类的成员函数的调用,不同的行为是指不同的实现,也就调用不同的函数。换言之,多态指的就是用同样的接口访问功能不同的函数,从而实现“一个接口,多种方法”。

24.多态的实现

从系统实现的角度看,多态性可分为两类:动态多态性,静态多态性。 静态多态性:是通过函数的重载来实现的,由函数重载和运算符重载形成的多态性属于静态多态性;在系统编译时系统就知道要调用哪个函数,又称编译时的多态性。 动态多态性:不在编译时确定调用的是哪个函数,而是在程序运行过程中动态地确定操作所针对的对象,又称运行时的多态性(通过虚函数实现)

25.虚函数及其作用

虚函数:用virtual修饰的函数称为虚函数,在基类中声明函数是虚拟的,并不是实际存在的函数,然后在派生类中才正式使用该函数。在其派生类中对该函数重新定义,赋予它新的功能,并且能够通过指向基类的指针指向同一类族中不同类的对象,从而调用其中的同名函数。 虚函数的作用:是在程序的运行阶段动态地选择合适的成员函数。实现动态多态性。 虚函数的实质:指向基类的指针在指向派生类对象时,自动进行指针类型转换,将派生类的对象的指针先转换为基类的指针,这样基类指针指向的是派生类对象中的基类部分。 在派生类中重新定义的函数应与虚函数具有相同的形参个数,形参类型和形参顺序。如果在派生类中没有重新定义虚函数,则它继承基类的虚函数。

26.静态关联和动态关联

确定调用的具体对象的过程称为关联, 函数重载和通过对象名调用的虚函数,在编译时即可确定其调用的虚函数属于哪一个类,其过程称为静态关联,由于是在运行前进行关联的,所以又称为早期关联,函数重载属静态关联。

虚函数就是通过基类指针与虚函数的结合来实现多态性的。先定义一个指向基类的指针变量指向对应类的对象,再通过基类指针去调用虚函数。这样的调用方式编译系统在编译时是不能确定调用了哪一个类对象的虚函数的, 当在编译系统在运行阶段确定关联关系时,指针可以先后指向不同的类对象,从而调用同族中不同类的虚函数,这种方式就是动态关联。

27.函数重载与虚函数的不同

1 重载函数要求函数具有相同的返回值类型和函数名称,并具有不同的参数序列,而虚函数则要求这三项(函数名,返回值类型,参数序列)完全相同 2 重载函数可以是成员函数或非成员函数 而虚函数只能是成员函数 3 函数重载可用于构造函数,而虚函数不能用于构造函数 4 重载函数是根据不同参数作为调用不同函数的依据,而虚函数根据对象的不同的调用不同类的虚函数 5 虚函数在运行期间表现出多态功能,这是c++的精髓,而重载函数则在编译时表现出多态 一般来讲,虚函数是一种特殊的重载,即必须被重载的函数,一般函数可以不被重载。一个函数被声明为虚函数,目的就是实现多态,若派生类不进行重定义则失去了原来的意图 6 函数重载是在程序编译阶段确定操作的对象的,属于静态关联。虚函数是在程序运行阶段确定操作对象的,属于动态关联。

28.虚析构函数

在析构函数面前加上关键字virtual进行声明,称析构函数为虚析构函数。 虚析构函数的作用:当父类的析构函数声明成虚析构函数的时候,当子类继承父类,子类中的析构函数也是虚函数,父类的指针指向子类对象时,delete掉父类的指针,先调动子类的析构函数,再调用父类的析构函数。

29.纯虚函数

纯虚函数是在声明虚函数时被“初始化”为0的函数,纯虚函数没有函数体。

30.抽象类

一个类中如果有纯虚函数,那么该类为抽象类。抽象类是不允许实例化对象的,作用:作为一个类族的共同基类,主要用来派生子类。纯虚函数在派生类中一定要实现,如果派生类中不实现基类中的纯虚函数,派生类就变成抽象类。

31.抽象类与接口的区别

抽象类的目的是为了延展类的继承结构,让继承结构整体更完整; 接口是为了实现类注入新的特性、功能。

32.输入输出流

C语言通过函数实现输入输出(scanf,printf),C++通过类对象实现输入输出(cin,cout) C++的输入输出流是指由若干字节组成的字节序列,这些字节中的数据按顺序从一个对象传送到另一个对象。 在内存中为每一个对象开辟一个内存缓冲区用来存放流中的数据。输出数据时先将数据送到输出缓冲区中保存形成输入流,直到缓冲区满或者遇到endl,就讲缓冲区中的全部数据送到显示器显示出来;输入数据时,数据先送到输入缓冲区中形成输入流,再从中提取数据。 缓冲区中的数据就是流

33.标准的输出流对象有哪些

标准的输入输出:即从键盘输入数据,输出到显示屏幕; 标准输入输出流: Cout流对象:向控制台输出; Cerr流对象:(标准出错流)向终端显示器输出错误信息; Clog流对象:(标准出错流)同Cerr,两者区别:cerr是不经过缓冲区直接向显示器上显示出错信息,clog中的信息存放在缓冲区中,缓冲区满或者遇到endl时向显示器输出。 流成员函数put:专用于输出单个字符

34.标准的输入流对象有哪些

Cin流: 用于字符输入的流成员函数: Get函数: 1.不带参数 从指定的输入流中提取一个字符 2.带一个参数,从输入流中提取一个字符,赋给某个变量 3.带三个参数,从输入流中读取n-1(或遇到指定的终止字符)个字符给指定的字符数组 Get与getline不同之处:用getline函数从输入流读字符,一次一行,或遇到终止字符提前结束,指针移到该终止字符之后,下一个getline函数将从终止字符的下一个字符继续读入。 而get遇到终止字符指针不向后移动

35.文件流类与文件流对象

文件流对象是以外存为对象的输入输出流对象。 文件流类是专门用于磁盘文件的输入输出操作。 要以磁盘文件为对象进行输入输出,必须定义一个文件流类的对象,通过文件流对象将数据从内存输出到磁盘文件,或者通过文件流对象从磁盘文件将数据输入到内存。 打开文件open,关闭文件close

整理不易,请多点点关注和收藏谢谢啦!


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3