C++基础与常见面试题


对象:在面向对象方法中,将数据及对数据的操作方法封装在一起,作为一个相互依存、不可分离的整体,这个整体称为对象

抽象: 对具体问题(对象)进行概括,抽出一类对象的公共性质并加以描述的过程

类: 把同类型的对象抽象出共性,形成类

封装: 就是将抽象得到的数据和行为相结合,形成一个有机的整体

初始化对象: 定义对象的时候进行的数据成员设置

构造函数: 创建对象,对成员初始化,分配空间

析构函数: 撤销对象,释放空间

内联函数: (inline)将需要重复调用且,简单的函数设为内联函数,会在编译时插入被调用的地方,分为隐式和显式

友元类: (friend)若A类为B类的友元类,则A可以访问B类的私有和保护成员

多态: 同样信息被不同类型的对象接受导致不同的行为

共有继承: 基类的公有成员和保护成员的访问属性在派生类中不变,而基类的私有成员不可直接访问

私有继承:基类中的公有成员和保护成员都以私有成员身份出现在派生类中,而基类的私有成员在派生类中不可直接访问

保护继承: 基类的公有成员和保护成员都以保护成员的身份出现在派生类总,而基类的私有成员不可直接访问

C/c++的区别:

C语言是一种结构化语言,面向过程,基于算法和数据结构,所考虑的是如何通过一个过程或者函数从输入得到输出;

C++是面向对象,基于类、对象和继承,所考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题,通过获取对象的状态信息得到输出或实现过程控制。

#include<file.h>与 #include "file.h"的区别?

C语言是一种结构化语言,面向过程,基于算法和数据结构,所考虑的是如何通过一个过程或者函数从输入得到输出;

C++是面向对象,基于类、对象和继承,所考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题,通过获取对象的状态信息得到输出或实现过程控制。

const和#define有什么区别?

(1)const和#define都可以定义常量,但是const用途更广。

(2)const 常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误。
(3) 有些集成化的调试工具可以对const 常量进行调试,但是不能对宏常量进行调试。

sizeof与strlen的区别?

(1)sizeof的返回值类型为size_t(unsigned int);

(2)sizeof是运算符,而strlen是函数;

(3)sizeof可以用类型做参数,其参数可以是任意类型的或者是变量、函数,而strlen只能用char*做参数,且必须是以’\0’结尾;

(4)数组作sizeof的参数时不会退化为指针,而传递给strlen是就退化为指针;

(5)sizeo是编译时的常量,而strlen要到运行时才会计算出来,且是字符串中字符的个数而不是内存大小;

指针和引用的区别?

指针和引用都提供了间接操作对象的功能。

(1) 指针定义时可以不初始化,而引用在定义时就要初始化,和一个对象绑定,而且一经绑定,只要引用存在,就会一直保持和该对象的绑定;

(2) 赋值行为的差异:指针赋值是将指针重新指向另外一个对象,而引用赋值则是修改对象本身;

(3) 指针之间存在类型转换,而引用分const引用和非const应用,非const引用只能和同类型的对象绑定,const引用可以绑定到不同但相关类型的对象或者右值

malloc/free 与 new/delete 之间的区别

malloc/free是C/C++标准库函数,new/delete是C++运算符。他们都可以用于动态申请和释放内存。

对于内置类型数据而言,二者没有多大区别。malloc申请内存的时候要制定分配内存的字节数,而且不会做初始化;new申请的时候有默认的初始化,同时可以指定初始化;

对于类类型的对象而言,用malloc/free无法满足要求的。对象在创建的时候要自动执行构造函数,消亡之前要调用析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制之内,不能把执行构造函数和析构函数的任务强加给它,因此,C++还需要new/delete。

好的博客: 面试中C++常见问题

results matching ""

    No results matching ""