C++常见面试问题
-
构造函数和析构函数可以是虚函数嘛添加链接描述
-
C++类内存分布,https://blog.csdn.net/bailang_zhizun/article/details/117124494
定义一个空类,对该类求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;
类的继承关系和内存分布混合;没看太懂;添加链接描述
默认权限(struct-public, class-private)
是否可用于声明模板(struct不可以, class可以)
-
内联函数与宏定义的区别添加链接描述
-
new 和 malloc 区别添加链接描述
-
构造/析构函数顺序添加链接描述
-
const 关键字的作用添加链接描述
-
sizeof ,strlen 和\0
1、sizeof是一个关键字,而strlen是一个函数。
2、sizeof求的是字节长度,而strlen求的是实际长度。
int a=1; sizeof(a)//4 strlen(a)//1
sizeof求的是分配过来的长度,而strlen求的却是实际使用的长度。
比如:char a[30]="abcd"; sizeof(a)=30;而strlen(a)=4;
strlen求的长度是以’\0’结束的。
比如char a[30];strlen(a)的结果是不定的,而sizeof(a)=30; char a[30]={'a','b','c'};对于strlen来说也是不定的,而sizeof却是30.
本文来自博客园,作者:开源侠,转载请注明原文链接:https://www.cnblogs.com/cyj22/p/17943410
微信公众号:青衫换酒吃
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!