C++基础知识

目录

一、C++语言基础

1.C++的3大特性

2.C和C++的区别

3.C++的struct和class的区别

 4.C++结构体和C结构体区别

5.简述C++代码到二进制可执行程序的过程

6.static关键字的作用

7.数组和指针的区别

8.函数指针

9.静态变量什么时候初始化

10.野指针产生的原因

11.静态局部变量、全局变量、局部变量的特点及应用场景

12.内联函数和宏函数的区别

13.i++和++I的区别

14.new和malloc的区别

15.内联函数和函数的区别

16.C++的传值方式

17.const*和*const的区别

二、面向对象

1.构造函数有哪几种

2.一个类,默认会生成哪些函数

3.简述向上转型和向下转型

4.重载和重写

5.类继承时,派生类对不同关键字修饰的基类方法的访问权限

三、其他问题

1.什么是稳定排序

2.什么是堆栈溢出

3.如何解决哈希冲突


C++基础知识参考

一、C++语言基础

1.C++的3大特性

封装、继承、多态。封装是把函数做成工具类,继承是对基础类功能进行扩充,多态是同一个函数名有不同参数,根据参数使用对应的函数。

2.C和C++的区别

1)C是C++的子集,C++可以兼容C语言,同时又引入了新特性,例如auto、智能指针、引用;

2)C++引入了模板概念;

3.C++的struct和class的区别

1)struct的默认访问控制权限是public,class的默认访问控制权限是private;

2)struct默认公有继承,class默认私有继承;

3)class关键字可以用来定义模板,struct不行

 4.C++结构体和C结构体区别

1)可以派生

2)C++结构体可以有函数

3)C++可以省略struct关键词直接用

4)C++的struct包含public、private、proteted三种权限

5.简述C++代码到二进制可执行程序的过程

预编译->编译->汇编->链接

1)把#define,#incude替换掉,去掉注释;

2)把C++代码转成汇编语言;

3)把汇编语言编译;

4)把每个源文件产生的目标文件进行链接;

6.static关键字的作用

7.数组和指针的区别

1)数组地址是连续的,指针是无序的

2)数组占用空间和数组长度有关,指针空间是固定的8bit

8.函数指针

用于函数回调

9.静态变量什么时候初始化

10.野指针产生的原因

释放指针的时候没有置NULL,导致其仍指向有数据的内存;解决方法有:

1)初始化置NULL;

2)申请内存后判空

3)指针释放后置NULL;

4)使用智能指针;

11.静态局部变量、全局变量、局部变量的特点及应用场景

12.内联函数和宏函数的区别

13.i++和++I的区别

i++是先使用i再加1,++i是先加1再使用i

14.new和malloc的区别

15.内联函数和函数的区别

内联函数直接用,函数需要调用

16.C++的传值方式

1)值传递

2)引用传递

3)指针传递

17.const*和*const的区别

1)const int a;     //指的是a是一个常量,不允许修改。
2)const int *a;    //a指针所指向的内存里的值不变,即(*a)不变
3)int const *a;    //同const int *a;
4)int *const a;    //a指针所指向的内存地址不变,即a不变
5)const int *const a;   //都不变,即(*a)不变,a也不变

二、面向对象

1.构造函数有哪几种

1)默认构造函数

2)初始化构造函数

3)拷贝构造函数

包含深拷贝和浅拷贝,深拷贝是直接重新创建一个,浅拷贝是起了个别名,还是用的原来的

4)移动构造函数

采用浅拷贝,避免一块儿空间被释放多次,也避免了内存浪费

2.一个类,默认会生成哪些函数

1)默认构造函数

2)拷贝函数

3)赋值运算符

4)析构函数

3.简述向上转型和向下转型

1)向上转型,子类转父类,使用dynamic_cast<>(),比较安全,不会丢失数据

2)向下转型,父类转子类,使用强制转型,不安全。

4.重载和重写

重载就是同一个函数名,不同形参;重写就是虚函数,子类的虚函数覆盖父类的。

5.类继承时,派生类对不同关键字修饰的基类方法的访问权限

1)继承public,类内可以访问基类的public、protected,不可以访问private;对象可以访问基类的public,不能访问protected和private。

2)继承protected,类内可以访问基类public、protected,不能访问private;对象不能访问基类的public、protected和private。

3)继承private,类内可以访问基类的public、protected,不能访问private;对象不能访问基类的public、protected和private。

6.什么是常函数,什么作用

常函数就是在函数后面加const,表示这个函数不改变类内的成员数据,它只能调用常函数,不能调用非常函数。

三、其他问题

1.什么是稳定排序

如果a[i]=a[i+1],且a[i]在a[i+1]前面,排序后它俩位置不变,则该排序算法稳定;否则不稳定

稳定的排序算法:冒泡排序、直接插入排序、归并排序

不稳定的排序算法:快速排序、希尔排序、堆排序

2.什么是堆栈溢出

空间不够,放不下。例如申请了一块儿很大的内存空间。

3.如何解决哈希冲突

(1)线性探测法

如果两个值都映射为同一个哈希值,则对第二个+1取余,如果该位置还有数,则继续+1取余

(2)开链法

在重复数字后面,使用链表添加重复的哈希值

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

aspiretop

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值