C面试宝典

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1、数据类型在C/C++中,数据类型分为两种,简单类型和结构类型,简单类型包括整数类型、字符类型、浮点类型、指针类型、枚举类型和void类型。结构类型包括:数组、字符串、记录和文件。C/C++中的基础数据类型分为三种:整型、浮点型和void型,其中不能定义void类型的变量,它仅仅是用于说明函数没有返回值和说明指针是无类型。其中整型是用来表示没有小数位的数,在C/C++中,用来表示整数、字符、布尔值的算术类型合称为整型。在32位机器中,int和long的长度通常是相等的。2C/C++中的常量通过关键字const常量也被称为常数,是指在程序运行之前就已经被确定,在程序的运行过程中不会发送改变。常量必须在定义的时候进行初始化。常量本身没有地址属性(除字符串常量外),而变量有地址属性,所以常量只能做右值,而变量左值、右值都可以。constchara=”test”正确charp;p=”test”;consttest=p;错误;常量必须直接赋值。3、逻辑操作逻辑操作分为逻辑或、逻辑与和逻辑非3种,其中逻辑或和逻辑非存在“短路求值”的情况。C++中变量为程序提供了可以操作的有名字的存储区。变量代表分配了一块存储区变量代表这个存储区的名称4、C/C++中的左值和右值实际上,左值是一个存储地址,也就是一块内存存储数据所要操作的地址,而右值是一个具体的数据或者数值,也就是该内存存储的数据内容。其中数字字面上是右值,不可以进行赋值。左值可以出现赋值语句的左边或者右边,也就是说左值可以当右值使用,右值只能出现在赋值的右边,在C++中变量在定义的时候没有初始化,它的值将是不确定的,不确定的值可能导致程序出现错误。5、变量的声明和定义的区别声明分为定义性声明和引用性声明。其中引用性声明我们叫做声明,定义性声明我们叫做定义,定义和声明最主要的区别在于定义要分配空间和声明不需要分配空间。C++程序通常由许多文件组成,为了让多个文件访问相同的变量,声明通过关键字extern。表明该变量已经在别的文件中定义,此处只是使用一下。变量只能定义一次,而声明可以存在多次。4、变量有哪几种存储类型变量的存储类型是从时间上进行划分的,分别是静态存储方式和动态存储方式。动态存储变量是指程序运行到该变量的时候才为其分配内存空间,当程序离开该变量所在的作用域时自动收回为其分配的存储空间。5、引用&C++中引入了引用的概念,引用的定义是在变量前加标识符&,引用是一个对象的别名,是C++中对象的另外一个名字。引用的主要作用作为函数的形式参数。引用必须进行初始化,且初始化对象必须是一个对象,例如:inta=100;int&refa=a;//&refa引用aint&refa=b;//错误:引用必须初始化int&refa=10;//错误,初始化必须为一个对象(变量)。6C与C++有什么区别?C语言是结构化的编程语言,它是面向过程的,而C++是面向对象的。C语言提供的3种预处理功能分别是:宏定义、文件包含和条件编译。7如何分配和释放存储空间new在C++中是一个关键字,它的使用操作结果是在申请一段指定数据类型大小的的内存。使用方式为指针变量=new数据类型。new使用后处理的3件事情,如下所示:1计算指定数据类型所需的内存空间2正确的指针内存3分配内存,初始化分配内存例:int*p;p=newint;p指向一段由new分配而来的新内存空间,最终p存储的是一个变量的地址。delete释放指针所指向的内存空间。8虚函数和纯虚函数虚函数的主要作用是建立抽象模型,从而达到方便扩展系统的目的。纯虚函数是虚函数的一个子集,用于抽象类,基类中不能对虚函数给出有意义的实习,它的实现留给派生类去做这就是纯虚函数,纯虚函数用于抽象类中,不能生成对象。虚函数必须是基类的非静态成员函数,其访问权限不可以实private。可以是public或者protected。为了方便多态性,引用了纯虚函数,在编译的时候需要在派生类中必须予以重载以实现多态性。9指针指针是用来存储内存地址的变量,程序中的所有变量和常量都存储在内存地址中,这个内存地址表示变量和常量在内存中的存储位置,同样地,函数也是有内存地址的。指针用于指向对象,对对象的间接访问。10指针与数组指针和数组有密切的关系,在表达式中使用数组名时,该数组名会自动转换为指向数组第一个元素的指针。11、const修饰指针const位于*的左侧,指针所指的内容不可变const位于*的右侧,指针本身为常值,但指向内容可以变constint*a=&b;//指针所指的内容不可以改变int*consta=&b;//指针本身不可以改变,即a不可以改变。可以变为a=&c;12this指针在C++中this指针表示当前运行的对象,在实现对象的方法时,可以使用this指针来获得该对象的自身引用。this指针是一个隐含的指针,指向当前对象,表示当前对象的地址。13函数的参数函数的参数有三种形式:值传递,引用传递,指针传递15数组指针和指针数组强调的都是最后一个字,数组指针是指指向一个数组的指针,指针数组是指数组元素都是指针的元素的数组。14、指针和引用的区别指针和引用都是地址的概念,指针是指向一块内存,它的内容是内存中地址,而引用是模块某块内存的别名,指针是作为一个真实的实体而存在。区别:1指针是一个实体(真实而存在的东西),引用只是一个别名。2在内存分配上,程序要为指针分配内存,而引用是一个别名,不用为其分配内存空间3引用只能在定义时被初始化一次,之后不可变,指针可以变化。4引用不能为空,而指针可以为空。5引用无const,而指针有const关键字6”sizedof引用”得到的是所指向的变量的大小。“sizeof指针”得到的是指针本身的大小。面向对象的3个基本要素:封装、继承、多态15抽象类及它的用途抽象类可以提供多个派生类共享基类的公共定义的定义,它可以提供抽象方法,也可以提供非抽象的方法,抽象类不能够实例化,必须通过继承实现其抽象的方法,抽象类不能使用new关键字,它也不能被封装,如果派生类没有实现所有的抽象方法,则该派生类也必须声明为抽象类。派生类用覆盖(重写)的方法来实现抽象的方法。抽象类一定含有纯虚函数,因此不能定义抽象类的对象包含纯虚函数的类成称为抽象类,抽象类把含有共同属性和方法的对象抽象成功一个类。16如何访问静态成员静态成员的关键字为static,能够在类的范围内所有对象共享的,而不是被某个对象所独有的成员变量,因此静态函数中不含有this指针,this指针始终指出当前对象,在类中使用静态成员,可以实现多个对象之间数据的共享,派生类和基类可以共享静态成员,类的静态成员可以独立访问,也就是说不需要创建类的实例(对象)可以访问静态成员。其中类的静态方法只能调用静态成员,类的静态成员在类加载时就已经生成,生命周期长于对象。17多态性在C++中多态性是通过虚函数实现的,多态性是指允许将子类类型的指针复制给父类类型的指针,多态是行为上的一种封装,“一种接口,多种实现”。多态的主要作用是以下两点:1精简代码的量2派生类的功能可以被基类的方法或引用变量所调用,这称为向后兼容性,很大程度上提高可扩充性和可维护性。派生类总是可以转换为基类的引用类型。可以实现向后兼容性。18虚成员虚成员也称为虚函数,虚函数主要实现多态的机制,虚函数的核心理念就是通过基类可以访问派生类定义的函数,虚函数必须是基类中非静态的成员函数。它的访问权限为public或者protected。可以通过指向基类的指针或者基类的引用对象来调用派生类的实现了的虚函数。19构造函数和析构函数构造函数和析构函数都是自动调用的函数。析构函数与构造函数均无返回值,构造函数用于在创建对象时初始化对象,即为成员变量赋初值,构造函数必须与类名相同,无返回值(没有返回类型),也不能用void修饰。可以进行重载。析构函数与类名相同,且前面加了~,析构函数无返回值,不带参数,不可以重载。拷贝构造函数拷贝构造函数是一种特殊的构造函数,函数的名称必须与类名相同,且有且只有一个不可变参数,参数是本类型的一个引用变量,该参数是const类型,不可变的,例如:类X的拷贝构造函数的形式为X(X&x)。拷贝构造函数又分为浅复制和深复制,它们的主要区别在于引用对象有没有为分配空间。深复制(深拷贝)和浅复制(浅拷贝)区别:最主要的区别在于对象资源的复制,而浅复制只是一个新的引用指向了资源。杂记:形参是函数定义时在形参表中定义的,并且由调用函数调用时传递函数的实参所初始化的。内敛函数:在类声明的内部声明或定义的成员函数叫做内敛函数,在内敛函数中不允许使用循环语句和开关语句。20容器容器是容纳特定类型对象的集合,可以认为是数组的扩展,即对象的数组,迭代器可以进行容器的遍历。杂记:数组名作为函数的参数时,在函数体内就变成一个指针。voidFunc(charstr[100]){sizeof(str);}sizeof(str)=4;Func(charstr[100])函数中数组名作为函数形参,在函数体内函数名仅仅是一个指针,可以做自增、自减操作。21算法直接插入和选择排序、希尔排序、选择排序:首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从未排序序列中继续寻找最小元素,然后放到排序序列末尾。以此递归。直接插入排序:逐一取出元素,在已排序的元素序列中从后向前扫描,放到合适的位置,注意(起初,原始排序序列为空)。希尔排序:希尔排序是较为复杂的插入排序。软件工程22软件开发的模型软件开发的模型有四个,瀑布模型,原型模型、螺旋模型、增量模型瀑布模型,在瀑布模型中,软件的各个活动严格按照线性方式进行,当前活动接受上一个活动的工作结果,实施完成所需的工作内容。瀑布模型的特点:1具有顺序性和依赖性必须等待前一阶段工作的完成,才能开始后一工作阶段。2瀑布模型的缺点:1依赖早期进行的唯一的一次需求调查,不能适应需求的变化2风险往往推迟到后期的开发阶段才暴露出来,失去及早更正的机会瀑布模型一般适用于需求清晰明了且时间要求宽松的软件开发项目,规模小、需求简单。功能单一的项目,原型模型:原型模型是可以快速建立起来的在计算机运行的程序。它的功能往往是最终产品功能的一个子集。原型模型的特点:1用户需求不完全或不确定2针对总体的轮廓先建立一个用户需求原型,然后进行反馈和评价。3对原型进行扩充、改进和求精4完成最终系统原型模型的缺点:原型模型的目的是用来进行演示的,实际用来操作时不行的,不可以进行详细的输入输出。螺旋模型:瀑布模型与原型模型结合起来,并且加入了两种模型均忽略的风险分析。螺旋模型的特点是风险进行驱动的,关注风险,进行风险分析后进行决策是否进行项目。用于大规模软件项目,需求不明朗,风险比较高的项目。增量模型:增量模型融合了瀑布模型的基本成分和原型模型的迭代特征,采用随着日期的进展而交错的线性序列。其特点是第一阶段增量往往是核心产品,每一个阶段增量均可以发布一个新的产品,早期的版本是最终产品的可拆卸版本,用于需求逐渐清晰的产品。23四种开发模型的选择瀑布模型:需求明确且时间要求宽松的软件开发项目或者规模小,功能单一的产品。原型模型:适用于客户能提出的一般性的目标,但不能标出详细的输入、处理及输出需求、螺旋模型:大规模软件项目,需求不确定,风险比较高的项目增量模型:需求逐渐清晰的项目。24软件测试软件测试就是为了发现软件中的错误,软件测试的过程就是软件运行的过程,测试用例:在软件运行的时候,针对不同的运行情况进行不同的数据输入和操作。白盒测试:黑盒测试:为了证实软件的各个产品功能,黑盒测试在软件的接口上进行测试。白盒测试:对程序的内部逻辑结构和内部逻辑进行测试。25白盒测试的设计原则1保证模块的每一个独立路径至少执行一次2保证所有判断的每一个分支被执行一次3保证循环都在边界条件和一般条件下各执行一次5验证所有内部数据结构的有效性。26设计模式的分类:27关系数据库设计范式数据库:按照一定数据结构来存储和管理数据的软件

1 / 13
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功