C++\Linux\网络 常见面试题汇总

本文汇总了C++、Linux、网络等方面的面试常见问题,包括C++的类特性,git操作,HTTP与TCP协议,Linux命令及SQL事务等,旨在帮助软件开发者准备面试。

以下是面试一家外企的C++软件开发时的面试题汇总。

Part1:C++语言特性:

1,C++里面类的static成员变量有什么特点?

static成员变量,是独立于类对象存在的,是与类绑定在一起的一个概念,存储区域在静态存储区。该变量的初始化只能在类外进行。比如说,某个person类有一个static的nation变量,虽然,这个类可能定义1000个person的对象,但是,他们的国籍是一样的,只占用一个存储单元,因此,如果成员变量定义成static,可以有效地减小多个对象具有共同属性的情形下的存储空间。因为static成员变量是与类的概念进行绑定的,所以,如果其中的一个对象修改了static变量的值,那么其它对象在使用该static成员变量的时候,变量的值都跟着改变。static成员函数也是一样,与此同时,static成员函数只能调用static的变量,且该函数没有this指针。

2,C++构造函数和析构函数可否定义为虚函数?

首先阐释一下构造函数为什么不可以是虚函数,虚函数是通过虚函数表指针vptr来调用的。在类实例化的过程中,首先会给对象分配空间,然后会调用类的构造函数,而vptr也是在这一步产生的,如果构造函数也是虚函数的话,那么调用构造函数势必要采用vptr来调用。那么这个问题就类似“先有鸡还是先有蛋”的问题了。

那么析构函数为什么可以是虚函数呢?

如果基类的指针指向了派生类的对象,如BaseClass *sub = new SubClass();那么当对象使用完毕需要释放资源的时候,要使用delete sub;此时,系统会自动帮我们执行析构函数,但是如果这个析构函数不是虚函数的话,就只会释放基类中的资源,而派生类中的这部分资源就会发生内存泄漏。

3,C++从虚函数表里面如何能够找到对应的虚函数?或者如何能够找到基类的指针?

C++中的多态是用虚函数实现的: 子类覆盖父类的虚函数, 然后声明一个指向子类对象的父类指针, 如Base *b = new Derive();当调用b->f()时, 调用的是子类的Derive::f()。这种机制内部由虚函数表实现。

需要明确一点,就是32位操作系统,一个指针占4个字节,64位操作系统,一个指针占8个字节。

包含虚函数的类才会有虚函数表, 同属于一个类的对象共享虚函数表, 但是有各自的_vptr.虚函数表实质是一个指针数组,里面存的是虚函数的函数指针。

4,C++重载(overload)和覆盖(

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值