C++常见基本笔试/面试题总结

1、c++与c的关系

1.c++是c的增强版,是几乎完全兼容c的

2.c++在c的基础上增加了很多新的内容

3.编程思想发生了转变,c更多的是面向过程,c++是面向过程+面向对象,面向对象是通过面向过程来实现的

2、c的结构体和c++的结构体的区别?

1.c的结构体中不能有函数,但c++可以

2.c中空结构体内存大小为0,但c++为1

3、c++中的结构体和类的区别?

结构体的默认的访问限定符是public,而类是private

访问限定符:

Public修饰的成员既可以在类内被访问,也可以在类外被访问

Private和protected修饰的成员只能在类内被访问

4.你对封装怎么理解的?

封装:把一类事物的属性和行为用类这种自定义的数据类型包起来,把需要隐藏的隐藏起来,把可以暴露的暴露出来,这就叫封装

5、New、delete和malloc、free的区别?

1.malloc和free是标准c库的函数,new和delete是c++的运算符

2.Malloc需要强制类型转换,而new不需要

3.Malloc需要计算开辟空间的大小,而new不需要

6、为什么有了malloc和free,还需要有new和delete?

因为malloc和free是c库函数,不会自动调用构造和析构,而new和delete会

7、什么时候需要自己定义拷贝构造函数?

构造函数中有new的时候,需要进行深拷贝

8、修饰符static

修饰成员变量

1.必须在类内声明在类外定义

2.先于对象而存在,一个类只有一份,所有对象共享,不占某个对象内存空间大小

3.在类外可以直接通过类名加作用域的方式进行访问

修饰成员函数

1.可以直接通过类名加作用域访问

2.没有this指针,不能访问非静态成员

3.非静态的成员函数可以访问静态成员

9、修饰符const

修饰成员变量

1.不能作为左值,只能使用初始化列表的方式进行初始化

修饰的成员函数

1.const修饰的成员函数中不能修改任何成员变量的值

2.const看似在修饰成员函数,实则是在修饰这个成员函数的第一个形参this

3.常成员函数只能调用常成员函数

修饰的对象

1.不能作为左值

2.只能调用const修饰的成员函数

3.不能修改成员变量的值

10、继承方式

1.只有父类的public成员被子类public继承才能在子类内和外都可以被访问

2.父类的protected成员被子类继承了之后只能在子类内部进行访问

3.父类的private成员被子类继承了之后不可访问

11、静态多态和动态多态

我们平时说的多态更多指的就是动态多态

先看一下什么叫动态什么叫静态,有没有觉得似曾相识?

静态链接:编译时就会将静态库加载到可执行文件中

动态链接:运行时才会将动态库加载到可执行文件中

所以动态(运行阶段)和静态(编译阶段)的区别:链接时刻不同

绑定:函数调用和函数体的绑定

静态多态(早绑定):调用一个函数,在编译阶段就能够确定最终执行的是哪个函数体

动态多态(晚绑定):调用一个函数,在运行阶段才能确定最终执行的是哪个函数体

12、实现动态多态的条件

1.继承,多个子类一个父类

2.父类有虚函数,子类重写父类的虚函数

3.父类指针指向子类对象(一个函数,函数的形参是父类的指针,实参是子类对象的地址)

13、多态存在的问题

因为在实现多态的时候需要父类指针指向子类对象,如果子类对象是new出来的,那么delete父类指针的时候只会调用父类的析构函数没有调用子类的析构函数,就会存在内存泄露

解决方案:在父类的析构函数前加virtual使其变成虚函数

为什么不调用子类的析构函数就会内存泄露?

因为析构函数是用来回收资源的,比如这个类在构造函数中new了,而又没调用析构函数,就无法delete,就会内存泄露

14、重载、隐藏和重写的区别

重载:同一作用域内,函数名相同,参数不同,与返回值无关

隐藏:子类定义了和父类同名的函数,除过和父类一模一样的虚函数

重写(覆盖):子类定义了和父类一模一样的虚函数

15、为什么有了宏函数还需要内联函数呢?

宏函数的本质是宏,所以只是文本替换,形参需要加括号,形参类型默认是文本

内联函数本质是函数,形参不需要加括号,形参类型可以自己任意指定

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值