C++面试常见问题整理汇总(面试者必看哦!)

本文深入解析C++中的关键概念,包括继承、多态、内存管理、虚函数、拷贝构造函数等,帮助读者理解面向对象编程的核心机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

640?wx_fmt=gif

1. 继承方式

public      父类的访问级别不变

#include <iostream>	
using namespace std;	
class base	
{	
  public:	
    void printa()	
{ cout <<"base"<< endl; }	
  protected:	
    void printhello()	
{ cout <<"helo"<< endl; }	
  private:	
    void printnohello()	
{ cout <<"no hello"<< endl; }	
};	
class derived : public base	
{	
  public:	
    void printb() { printhello(); }	
    // void printc() { printnohello(); } //printnohello是父类的私有函数,不可访问	
};	
int main()	
{	
  base a;	
  a.printa();	
  //a.printhello(); //printhello是类derived的protected函数,不可访问。	
}

2. sizeof 和 strlen 的区别

① sizeof 是一个操作符,strlen 是库函数。

#include <iostream>	
#include <cstdlib>	
#include <cstring>	
using namespace std;	
int main()	
{	
  int a[] = {1, 2, 3, 4, 5};	
  cout << sizeof(a) << endl; //20	
//  cout << strlen(a) << endl;	
  char b[] = {'a', 'b'};	
  cout << strlen(b) << endl; //6	
  cout << sizeof(b) << endl; //2	
}

3. C中的 malloc 和C++中的 new 有什么区别

new、delete 是操作符,可以重载,只能在 C++中使用。

注意:malloc 申请的内存空间要用 free 释放,而 new 申请的内存空间要用 delete 释放,不要混用。

因为两者实现的机理不同。

640?wx_fmt=jpeg

4.简述C\C++程序编译的内存情况分配

C、C++中内存分配方式可以分为三种:

(1)从静态存储区域分配:内存在程序编译时就已经分配好,这块内存在程序的整个运行期间都存在。速度快、不容易出错,因为有系统会善后。例如全局变量,static变量等。

一个 C、C++程序编译时内存分为 5 大存储区:堆区、栈区、全局区、文字常量区、程序代码区。

5. 面向对象的三大特征

① 封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。

覆盖,是指子类重新定义父类的虚函数的做法。

总结:作用

① 封装可以隐藏实现细节,使得代码模块化

6. 简述多态的实现原理

编译器发现一个类中有虚函数,便会立即为此类生成虚函数表vtable。虚函数表的各表项为指向对应虚函数的指针。编译器还会在此类中隐含插入一个指针 vptr指向虚函数表。调用此类的构造函数时,在类的构造函数中,编译器会隐含执行 vptr 与 vtable 的关联代码,将 vptr 指向对应的 vtable,将类与此类的 vtable 联系了起来。另外在调用类的构造函数时,指向基础类的指针此时已经变成指向具体的类的 this 指针,这样依靠此 this 指针即可得到正确的 vtable。

如此才能真正与函数体进行连接,这就是动态联编,实现多态的基本原理。

注意:一定要区分虚函数,纯虚函数、虚拟继承的关系和区别。牢记虚函数实现原理,因为多态C++面试的重要考点之一,而虚函数是实现多态的基础。

7. c++空类的成员函数

缺省的构造函数

注意:只有当实际使用这些函数的时候,编译器才会去定义它们。

8. 谈谈你对拷贝构造函数和赋值运算符的认识

两个不同之处:

① 拷贝构造函数生成新的类对象,而赋值运算符不能。

注意:当有类中有指针类型的成员变量时,一定要重写拷贝构造函数和赋值运算符,不要使用默认的。

9. extern 有什么作用

extern 标识的变量或者函数声明其定义在别的文件中,提示编译器遇到此变量和函数时在其它模块中寻找其定义。

10. 引用和指针区别

① 引用必须被初始化,但是不分配存储空间。指针不必在声明时初始化,在初始化的时候需要分配存储空间

640?wx_fmt=png

640?wx_fmt=png

它,

不仅仅是一个码

扫码关注

C++资源免费送

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值