C++面试八股文

常用的LINUX命令

pwd  返回当前路径

vim (如果你安装了的话)编辑器

cp   复制

find  寻找文件

ls  显示当前目录下的文件

file 用于查看文件的类型

reboot 重启

C++

1.堆区和栈区的区别 

        栈区由系统自动分配,堆区由程序员控制,堆区可以实现动态申请内存,在C++中常用new,malloc等方式动态申请

2.请讲讲C++中new,malloc的区别

        它们都是动态申请内存的方式,通过调用操作系统的api来实现,

        new/delete在自由存储区上开辟空间,malloc、free在堆区分配空间。(你说new在堆上也对,因为自由存储区是一个抽象的概念,堆是物理上一块内存。)(下划线后面的是释放命令。)

        new比malloc安全:new的返回类型严格与对象匹配,malloc的返回类型是void然后被强制转化为类型对象,没那么安全。

        但是malloc比较好扩容,可以用realloc实现,但是new就没有什么直观的方式实现了。

3.请简述在C++中struct与class的区别

        struct默认是public继承,class是private继承。

4. 为什么基类函数的析构函数为虚函数

        C++支持多态性,这意味着基类指针可以指向派生类对象。

        当使用基类指针删除派生类对象时,如果基类的析构函数不是虚函数,将调用基类的析构函数而不是派生类的析构函数,导致派生类特有的资源没有被正确释放,可能会引起内存泄漏或其他资源管理问题。

STL相关

5.讲讲vector容器和list容器的区别

        这需要从底层结构上理解,vector的底层是数组,list是双向链表。

        所以内存上,vector连续存储,list非连续存储,只是逻辑上连续。所以vector扩容需要使用reserve函数手动扩容,list扩容是自动的。

        所以,插入和删除,list在任何位置都是高效的,vector在中间插入或者删除的时候需要移动大量元素,效率没那么高。

        同理,底层为数组的vector是支持随机访问的(vec[x])而list(链表)不支持。

6.讲讲迭代器,如果vector增删之后,迭代器是否有效,为什么?

1.任何导致整体重新分配内存的行为(长度自增扩容,清空)会失效。

2.改变了当前指向元素(插入,删除),会失效。

PS:我不理解这个问题的回答意义在哪里,为什么要在钢丝绳上跳舞,现在C++标准都更新这么多次了,任何不安全的操作就应该被避免。

        例如,在使用指针时,能用智能指针包裹就不要用比较原始的指针方式。

7.C++如何防止重复包含头文件

(1)使用宏的一些指令让编译器去干活

        比较常用的是#pragma once,虽然非标准指令,但是大多数编译器都支持。

        标准的:

#ifndef HEADER_FILE

#define HEADER_FILE

// 头文件内容

#endif

        
(2)

8.讲讲多态

静态多态在编译阶段实现,动态多态是指在运行时实现。

重载:重载是对于同一类中,可以定义多个同名不同参的函数(返回类型无所谓),在编译中就已经实现了。

重写:动态多态。子类中出现和父类名称相同的函数,用子类指针调用的是子类函数,用父类调用的是父类函数,如果用子类指针调用,实现的是子类函数。

9.讲讲引用和指针

        引用需要直接赋予初始值,而且一旦赋予不可以更改。指针可以不赋予初始值,默认值为nullptr(NULL)。

        引用的操作与原变量一样,不需要特殊的语法。

        指针在使用过程中一定要注意野指针,空指针的问题。

10.子类指针可以指向父类对象吗?

        不可以,会出现不兼容的问题。

        父类指针可以指向子类对象,此时调用该对象默认执行父类对象的成员函数(是指子类有重载的情况下)。

  • 25
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值