C++常见面试问题

  1. 内存分区

  2. 函数指针

  3. 虚函数表指针(类的内存分布一小部分)

  4. 构造函数和析构函数可以是虚函数嘛添加链接描述

  5. TCP 和 UDP 的区别添加链接描述
    添加链接描述
    B站视频详解

  6. C++类内存分布

定义一个空类,对该类求sizeof结果为1,因为在声明该类型的实例的时候,必须知道这个类在哪存在,否则无法使用这些实例。至于一个空类占多少内存,由编译器决定,vs中每个空类型的实例占用1字节的空间。
如果在该类型中添加一个构造函数和析构函数,再对其求sizeof还是1,因为你生命一个空类本身就存在默认构造函数和析构函数。
那如果把析构函数声明为虚函数,或者定义一个虚函数,发现再求sizeof变成了4!(在32位的机器上,如果是64位则是8)
原因是C++的编译器一旦发现一个类中有虚函数,就会为该类生成一个虚函数表,并在该类的每一个示实例中添加一个指向虚函数表的指针就是vptr。

类的成员变量和成员函数是分开存储的;
只有 非静态成员变量 才属于类的对象上;

class Person{
    
    
public:
	int m_A;//非静态成员变量;属于类的对象上
	static int m_B;//静态成员变量,不属于类的对象上;(记得类内声明,类外初始化)。
	void func(){
    
    } //非静态成员函数;不属于类的对象上,//一份就行,//this指针。
	static void func2(){
    
    };静态成员函数,不属于类的对象上;
}
int Person::m_B=0;//类外初始化;
//使用Perosn 创建一个对象,其sizeof为4;

为什么静态成员变量只能类内声明,内外初始化?

父类中所有非静态成员属性都会被子类继承下去,但是父类的私有属性会被编译器隐藏。子类不能访问而已,但是被继承了;

class Father(){
    
    
public :
 int m_a;
private:
	int m_b;
protected:
	int m_c;
};
class son :public Father(){
    
    
int m_d;
};

//创建一个子类对象,其sizeof为16=4*4;

类的继承关系和内存分布混合;没看太懂;添加链接描述

  1. 野指针添加链接描述

  2. 指针和引用添加链接描述

  3. 十大排序算法添加链接描述

  4. 线程和进程的区别添加链接描述

  5. struct 和class的区别

默认权限(struct-public, class-private)
是否可用于声明模板(struct不可以, class可以)

  1. 进程之间通信方式

  2. 内联函数与宏定义的区别添加链接描述

  3. new 和 malloc 区别添加链接描述

  4. 单例模式添加链接描述
    添加链接描述

  5. 构造/析构函数顺序添加链接描述

  6. const 关键字的作用添加链接描述

  7. sizeof ,strlen 和\0
    1、sizeof是一个关键字,而strlen确实一个函数。
    2、sizeof求的是字节长度,而strlen求的却是实际长度。

int a=1;sizeof(a)==4strlen(a)=1
 3、sizeof求的是分配过来的长度,而strlen求的却是实际使用的长度。
  比如:char a[30]="abcd";

   sizeof(a)=30;strlen(a)=4;

 4、strlen求的长度是以'\0'结束的。
比如char a[30];strlen(a)的结果是不定的,而sizeof(a)=30;
 char a[30]={
    
    'a','b','c'};对于strlen来说也是不定的,而sizeof却是30.

  1. extern “C”的作用详解添加链接描述

  2. static 关键字添加链接描述

  3. .单例模式1单例模式2

  4. C++程序编译的四个阶段

Guess you like

Origin blog.csdn.net/Aristotle__/article/details/121337230