关于c++的一些面试常问问题(考研面试编程语言)

前言:

本人22考研党,已上岸,发一些复试准备整理的资料作为对考研准备的一个收尾。由于近几年基本都是线上复试,线上的话会更加注重概念的考察,本人在复试准备期间搜集了面试题,整理了很多资料。本文主要概括了c++在复试面试中可能会考察的一些问题,仅供大家参考,如果对大家有帮助,希望大家点赞哦~
本文目前仅针对的是考研复试环节,不涵盖c++全部的知识,祝大家复试顺利。与其他科目不同的是,c++的学习,更加需要读者自己亲手去写才能更好地掌握,本文仅作为一个了解。复试的时候多半会问到面向对象语言的知识,哪怕学校给的参考书目中没有这一科,在java和c++中可以选择一个进行了解学习即可。由于作者本人水平有限,若本文有任何不对欢迎大家留言指正!上岸不易,希望大家都能去到想去的地方,加油。

1. C和C++的区别

(1)C是面向过程的语言,是一个结构化的语言;而C++是面向对象的语言,主要特征是继承、封装、和多态。
(2)C和C++动态管理内存的方法不一样,C是使用malloc/free关键字, 而C++还有new / delete关键字
(3)C++中有引用的概念,但是C中没有。

2. 封装、继承、多态分别是什么意思

封装:把客观事物封装成抽象的类,将属性和行为作为一个整体,隐藏了实现细节,使得代码模块化;
继承:派生类可以继承父类的数据和方法,减少重复代码,实现了代码的重用;
多态:“一个接口,多种实现”,概括就是同样的消息被不同类型的对象接收导致完全不同的行为。

3. New的使用方法

New是c++的运算符,用来动态分配内存,New返回该数据类型的指针,具体使用如下:

Int *p = new int(10); //返回int型指针
delete p; //释放
Int * arr = new int[10]; //数组
delete[] arr; //释放

4. new/delete, malloc/free的关系

malloc和free是C/C++语言的标准库函数,new/delete是C++的运算符。对于非内部数据类的对象而言,光用malloc/fee无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器的控制权限之内,不能够把执行构造函数和析构函数的任务强加给malloc/free。因此C++需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理和释放内存工作的运算符delete(在析构把堆区内存释放干净)。

5. 什么是引用,引用和指针的区别

C++中的引用是给便两个起一个别名,即它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称来指向该变量。

例:

int i = 17;
double f = 1.0;// 声明引用变量,&在这里不是取地址符号,而是引用符号
int& r = i;
double& s = f;

引用和指针的区别:
(1)指针是一个新的变量,存储另一个变量的地址,可以通过访问这个地址的方法来修改另一个变量。 引用只是一个别名,该别名仍然是代表变量本身,对引用的任何操作都代表着对变量本身的操作。
(2)引用必须在创建时被初始化,但指针可以在任何时候被初始化。
(3)引用一旦被初始化为一个对象,就不能指向别的对象;然而,指针可以在任何时候被修改为指向另一个对象。
(4)不存在空引用,引用必须连接到一块合法的内存;但是空指针是存在的。

6. 构造与析构函数

(1)构造函数(初始化) 作用在于创建对象时为对象的成员赋值
没返回值不需要写void
函数名与类名相同
可以有参数,可以重载
程序调用对象时自动调用构造函数,只调用一次
构造函数调用方法:括号法、显示法、隐式转换法。
(2)析构函数(清理) 对象销毁前系统自动调用,执行清理工作
没返回值不需要写void
函数名与类名相同,在名称前加符号~
不可以有参数,不可重载
程序在对象销毁前自动调用析构,只调用一次

7. 拷贝构造函数?

拷贝构造函数的格式为 类名(const 类名 &对象)

//拷贝构造韩式
Person(const Person &p)
{//将传入的对象p身上的所有属性,拷贝到自身上age = p.age;
}

拷贝构造函数调用时机:
1、使用一个已经创建完毕的对象来初始化一个新对象
2、值传递的方式给函数参数传值(传对象给函数,开辟空间拷贝数据)
3、值方式返回局部对象

8. 深拷贝、浅拷贝?

浅拷贝:简单的赋值拷贝操作 (浅拷贝问题:堆区的内存重复释放,可以利用深拷贝解决)
深拷贝:在堆区重新申请空间,进行拷贝操作

m_Height = p.m_Height; //编译器默认实现就是这行代码,浅拷贝
//深拷贝操作
m_Height = new int (*p.m_Height);

9. 全局区、堆和栈的区别?

全局区:存放全局变量和静态变量以及常量,程序结束后系统自动释放
堆区:存放在程序运行时动态分配的对象,比如 new 出来的对象,生存期由程序控制;若程序不释放则在程序结束时操作系统回收
栈区:用来保存定义在函数内的非静态对象,如局部变量、形参,仅在其定义的程序块运行时才存在,栈的对象由编译器自动创建和销毁。

10. 形参和实参的区别?

形参变量只有在被调用时才分配内存单元,在调用结束时, 即刻释放所分配的内存单元。因此,形参只有在函数内部有效。 函数调用结束返回主调函数后则不能再使用该形参变量。
实参可以是常量、变量、表达式、函数等, 无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值, 以便把这些值传送给形参。

11. 静态多态

静态多态包含了函数重载和运算符重载,进行地址早绑定
函数重载:函数名相同,根据参数类型选择不同的函数实现重载
运算符重载:对已有运算符赋予多重含义(类名 operator运算符(参数列表)),将指定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参。

//通过成员函数重载运算符
Person operator+ (Person &p)
{Person temp;temp.m_A = this->m_A+p.m_A;temp.m_B = this->m_B+p.m_B;return temp;
}
//使用
Person p3 = p1.operator+(p2);
//简化为
Person p3 = p1 + p2;//通过全局函数重载运算符
Person operator+ (Person &p1, Person &p2)
{Person temp;temp.m_A = p1.m_A + p2.m_A;temp.m_B = p1.m_B + p2.m_B;return temp;
}
//使用
Person p3 = operator+(p1,p2);
//简化为
Person p3 = p1 + p2;

12. 不能重载的运算符?(这个得知道)

. 成员访问运算符
.* 成员指针访问运算符
:: 作用域运算符
sizeof 长度运算符
?: 条件运算符

13. 必须通过成员函数重载的运算符?

= 赋值运算符
() 类型转化运算符
[] 下标访问运算符
-> 条件运算符

14. 虚函数

虚函数可以让成员函数操作一般化,用基类的指针指向不同的派生类的对象时,基类指针调用其虚成员函数,则会调用其真正指向对象的成员函数,而不是基类中定义的成员函数(只要派生类改写了该成员函数)。若不是虚函数,则不管基类指针指向的哪个派生类对象,调用时都会调用基类中定义的那个函数。虚函数是C++多态的一种表现,可以进行灵活的动态绑定。
纯虚函数:virtual 返回值类型 函数名(参数列表)= 0;

//纯虚函数
virtual void func() = 0;

纯虚函数只是一个接口,是个函数的声明而已,它要留到子类里去实现
有了纯虚函数,这个类称为抽象类,它无法实例化对象,抽象类的子类,必须要重写父类中的纯虚函数,否则也属于抽象类

15. 动态多态

派生类重写基类的虚函数,实现接口的重用,运行阶段确定函数的地址。

16. this指针是什么?

this指针指向被调用成员函数所属的对象,它隐含于每一个非静态成员函数中的特殊指针,不需要进行声明。
当对一个对象调用成员函数时,编译程序先将对象的地址赋给 this 指针,然后调用成员函数,每次成员函数存取数据成员时,都隐式使用 this 指针。
this 指针被隐含地声明为:

ClassName *const this;

不能给 this 指针赋值,即不能改变指针的指向; this 并不是一个常规变量,而是个右值,所以不能取得 this 的地址。
this指针的用途:
当形参和成员变量同名时,可用this指针来区分,解决名称冲突。
在类的非静态成员函数中如果返回对象本身,可使用return *this(链式编程思想)

Person& PersonAddAge(Person &p)
{this->age += p.age;return *this;
}
p2.PersonAddAge(p1).PersonAddAge(p1);//链式编程

17. Const与指针

Const int * p=&a; //指针常量,指针指向可改,指向的值不可改
int * Const p=&a;//常量指针,指向不可改,指向的值可改
Const int * Const p=&a; //指针指向不可改,指向的值也不可改

18. 常函数和常对象

常函数
成员函数后加const则称这个函数为常函数
常函数内不可修改成员属性
成员属性声明时加关键字mutable后在常函数中可以修改
常对象
声明对象前加const称该对象为常对象
常对象只能调用常函数

//常函数
void func() const{}
//常对象
const Person p;

19. 静态成员函数和静态成员变量?

(1)静态成员函数
所有的对象共享同一个函数
静态成员函数只能访问静态成员变量
静态成员函数也有访问权限,类外访问不到私有静态成员函数
访问方式:可通过对象访问,或者不创建对象通过类名访问。

(2)静态成员变量
所有对象共享同一份数据
在编译阶段分配内存
类内声明,类外初始化

20. 内存泄漏是什么

用动态分配的内存空间,在使用完毕后未释放,导致一直占据该内存单元,称这种情况为内存泄露, 简单说就是new出来的对象使用完没有delete。

21. C++中结构体和类的区别

与c不同的是,C++中的结构体引入了成员函数、访问控制权限等面向对象特性,他与类的不同就是结构体中的成员默认访问权限为public,而类中为private

面向对象程序设计(c++)面试常问——for考研复试面试相关推荐

  1. 操作系统面试常问——for考研复试面试

    关于操作系统的一些面试常问问题 前言: 本人22考研党已上岸,发一些复试准备整理的资料作为对考研准备的一个收尾.由于近几年基本都是线上复试,线上的话会更加注重概念的考察,本人在复试准备期间搜集了面试题 ...

  2. 数据库面试常问——for考研复试面试

    关于数据库的一些面试常问问题 前言: 本人22考研党,已上岸,发一些复试准备整理的资料作为对考研准备的一个收尾.由于近几年基本都是线上复试,线上的话会更加注重概念的考察,本人在复试准备期间搜集了面试题 ...

  3. 计算机英语口语面试自我介绍,2018考研复试面试英语口语自我介绍范文6

    2018考研复试交流群 120223238 考研复试对考生来说是非常重要的一部分,它关系到考生是否能考研成功的关键.考研复试面试中用英语介绍自己,是考查考生综合运用能力,这部分内容是非常的重要,自我介 ...

  4. 计算机读博ccfc有用吗,考研复试面试用细节赢得导师认可

    第1篇:考研复试面试用细节赢得导师认可 2013年考研复试在即,面对又一轮的考研挑战,同学们不仅要抓紧时间修炼自身的"内功",还要与导师面对面的交流.所以,面试从一定意义上来说决定 ...

  5. 计算机考研复试面试常问问题 编程语言篇

    计算机考研复试面试常问问题 编程语言篇 个人整理,免费分享,不可用于商业用途,转载请注明出处! 但是有同学反应闲鱼上有人盗卖此免费分享资料,还有好多同学买了,所以希望大家多多点赞评论收藏,提高这份资料 ...

  6. java中高级面试_中高级面试常问:Java面向对象设计的六大原则

    这篇文章主要讲的是面向对象设计中,我们应该遵循的六大原则.只有掌握了这些原则,我们才能更好的理解设计模式.我们接下来要介绍以下6个内容.单一职责原则--SRP 开闭原则--OCP 里式替换原则--LS ...

  7. 考研面试常问问题汇总(包含答案)

    最今年在准备复试的过程中为了准备面试过程中老师可能问到的英文题目在网上找了些常见的问题并整理了如下所示 一.考研口语面试常见问题30个(先放部分) 1.Where do you come from? ...

  8. 计算机考研复试面试常问问题 数据库篇

    计算机考研复试面试常问问题 数据库篇 在复习过程中,我用心查阅并整理了在考研复试面试中可能问到的大部分问题,并分点整理了答案,可以直接理解背诵并加上自己的语言润色!极力推荐打印下来看,效率更高!绝对良 ...

  9. 计算机考研复试面试常问问题 计算机网络篇(上)

    计算机考研复试面试常问问题 计算机网络篇(上) 在复习过程中,我用心查阅并整理了在考研复试面试中可能问到的大部分问题,并分点整理了答案,可以直接理解背诵并加上自己的语言润色!极力推荐打印下来看,效率更 ...

最新文章

  1. 发现了lucene一个bug
  2. Controller节点无法启动neutron-server
  3. 3D数学基础:图形与游戏开发---随笔四
  4. 简单几步即可判断Linux系统有无被DDOS攻击的方法
  5. PHP超级配置模块--PHP4,PHP5,module,cgi任你玩转--应用于Apache
  6. SAP NetWeaver
  7. Python机器学习:KNN算法08更多思考
  8. php 半角,php 中全半角转换
  9. Docker Hub 将放弃支持客户端 1.5 及以下版本
  10. Android工程项目打包成SDK(jar或aar格式)
  11. WIN7无法卸载掉中文繁体注音输入法
  12. CentOS7 yum 安装 maven
  13. java简单小程序输出所有汉字代码实例
  14. python 节假日_python获取全年节假日
  15. 易基因|Genome Biol:DNA甲基化在玉米籽粒发育表观调控作用的研究新进展
  16. CKA 报考指南与准备事项
  17. hive-Fetch抓取
  18. Avoiding 16 Common OpenGL Pitfalls(避免 16 个常见的 OpenGL 陷阱)
  19. 笔记本键盘部分按键失灵?
  20. Day 5-6 阿里云手机验证码及登录代码

热门文章

  1. Android studio 解决运行按钮灰色/禁用状态
  2. ArcGIS教程:ArcGIS中的报表
  3. 年后第一天上班就提辞职是不是“不厚道”???
  4. 网络1711班 C语言第一次作业批改总结
  5. 全国计算机一级考试下半年,下半年全国计算机一级考试试题及答案
  6. 【毕业设计】基于python的旅游数据分析可视化系统 -大数据 旅游数据分析
  7. 太和二中计算机考试,太和二中网上阅卷系统|翰林金榜太和二中查分系统 网页版_最火软件站...
  8. Matlab算法之优化计算1
  9. linear polarized light and plane polarized light(线性偏振光和平面偏振光)
  10. 全国互联电网调度管理规程(第一章__第九章)