C++基础知识点总结

1.面向对象技术的基本概念是什么,三个基本特征是什么?

答:基本概念:类、对象、继承; 基本特征:封装、继承、多态。
封装:将低层次的元素组合起来形成新的、更高实体的技术;
继承:广义的继承有三种实现形式:实现继承、可视继承、接口继承。
多态:允许将子类类型的指针赋值给父类类型的指针

2.什么是多态?多态有什么作用?

答:多态就是将基类类型的指针或者引用指向派生类型的对象。多态通过虚函数机制实现。多态的作用是接口重用。

C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数

3.进程间如何通信?

答:信号、信号量、消息队列、共享内存

4.在网络编程中涉及并发服务器,使用多进程与多线程的区别?

(1)线程执行开销小,但不利于资源管理和保护;进程则相反,进程可跨越机器迁移。

(2)多进程时每个进程都有自己的内存空间,而多线程间共享内存空间;

(3)线程产生的速度快,线程间通信快、切换快;

(4)线程的资源利用率比较好;

(5)线程使用公共变量或者资源时需要同步机制

5.请讲述堆和栈的区别。

(1)申请方式不同。栈上有系统自动分配和释放;堆上有程序员自己申请并指明大小;

(2)栈是向低地址扩展的数据结构,大小很有限;堆是向高地址扩展,是不连续的内存区域,空间相对大且灵活;

(3)栈由系统分配和释放速度快;堆由程序员控制,一般较慢,且容易产生碎片;

6.应用程序在运行时的内存包括代码区和数据区,其中数据区又包括哪些部分?

答:对于一个进程的内存空间而言,可以在逻辑上分成 3个部份:代码区,静态数据区和动态数据区。

动态数据区一般就是“堆栈”。 栈是一种线性结构,堆是一种链式结构。进程的每个线程都有私有的“栈”。

全局变量和静态变量分配在静态数据区,本地变量分配在动态数据区,即堆栈中。程序通过堆栈的基地址和偏移量来访问本地变量。

7.C++函数中值的传递方式有哪几种?

答:三种传递方式为:值传递、指针传递和引用传递

8.指针和引用的区别
1、引用在创建时必须初始化,引用到一个有效对象,不是对象,不占用内存空间;而指针在定义时不必初始化,可以在定义后的任何地方重新赋值,是对象,占用内存空间。

2、指针可以是NULL,引用不行。

3、引用貌似一个对象的小名,一旦初始化指向一个对象,就不能将其他对象重新赋值给该引用,这样引用和原对象的值都会被更改。

9.堆栈的区别

1、管理方式不同
栈是编译器管理,堆的占用和释放都是由程序员进行控制的;

2、空间大小不同
在32位系统下,一般堆的内存可以达到4G的空间,可以说堆内存几乎是没有限制的。但是对于栈,一般都有一定空间大小(跟编译器有关),比如在VC6下默认的栈空间大小是1M
能否产生碎片不同。

对于堆来说,频繁的new/delete操作会造成内存空间的不连续,从而造成大量碎片,使程序效率降低;但是对于栈来说,因为总是先进后出不存在内存块不连续的问题。

3、生长方向不同
堆的生长方向是向上的,即向着内存地址增加的方向;
栈的生长方向是向下的,即向着内存地址减小的方向增长。

4、分配方式不同
堆总是动态分配的,需要程序员手动释放;栈存在静态分配和动态分配的:其中静态分配是由编译器完成的(比如局部变量的分配);动态分配是由alloca函数进行分配的(这个函数会在栈帧的调用处上分配一定空间,当调用alloca的函数返回到调用位置时,这些临时空间会被自动释放),栈的动态分配是由编译器自己进行释放的。

5、分配效率不同:
栈是机器系统提供的数据结构,计算机会在底层对栈提供支持,包括:分配专门的寄存器来存放栈的地址、入出栈都有专门指令,因此栈的效率会比较高。

堆是C/C++函数库提供的,其机制非常复杂,比如为了分配一块内存,库函数会按照一定的算法在堆内存中搜索可用的足够大小的空间,如果找不到(可能是因为内存碎片过多),就可能调用系统功能区(用户模式和内核模式的切换)增加程序数据段的内存空间,如此便有机会分到足够大小的内存,然后进行返回。

10.C++多态

动态分为静态和动态多态,静态多态又分为函数重载
静态多态是编译器在编译期间完成的,编译器会根据实参类型来选择调用合适的函数,如果有合适的函数可以调用就调,没有的话就会发出警告或者报错。

动态多态: 显然这和静态多态是一组反义词,它是在程序运行时根据基类的引用(指针)指向的对象来确定自己具体该调用哪一个类的虚函数。

动态多态的条件:
●基类中必须包含虚函数,并且派生类中一定要对基类中的虚函数进行重写。
●通过基类对象的指针或者引用调用虚函数。

11.那些函数不能定义为虚函数?
1)友元函数,它不是类的成员函数
2)全局函数
3)静态成员函数,它没有this指针
3)构造函数,拷贝构造函数,以及赋值运算符重载(可以但是一般不建议作为虚函数)

12.虚函数
用virtual 关键字修饰的成员函数,就是虚函数。
在某基类中把成员函数声明为 virtual ,并在一个或多个派生类中重新定义。实现多态性,通过指向派生类的基类指针或引用,访问派生类中同名覆盖成员函数。

13.引用和指针的区别
本质:引用是别名,指针是地址
指针可以再运行的时候改变其所指向的值,引用一旦和某个对象绑定就不能再改变;
从内存上看,指针会分配内存区域,而引用不会,它仅仅是一个别名;
在参数传递时,引用会做类型检查,而指针不会;
引用不能为空,指针可以为空。

14.进程线程区别
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值