以前的很多笔记都是通过私人笔记保存了,面试的时候问到我的博客或者GitHub,很尴尬竟然没有写,所以打算把找工作的阅读的一些经验分享出来,内容不是特别详细的教程方式,主要是总结性质,希望大家也可以一起进步。
编程语言c++
1、sizeof (操作符、内存对齐、实例、虚函数)
2、typedef3、赋值运算符函数
- 基本数据类型的sizeof
- 结构体的sizeof
- 联合体的sizeof
- 指针的sizeof
- 函数的sizeof (结果是函数返回值类型的大小)
- 类的sizeof
- 只有数据成员的对象
- 没有虚函数的对象(实例 和 类体 )
- 拥有虚函数的类对象
情况3针对拥有虚函数的类对象。引用一个大神对虚函数机制的介绍 (主要为了实现运行时的动态绑定,多态)
这里是虚函数sizeof的一个例子(vs2013,不同的编译器可能有区别,和实现有关)
内存布局:
很明显可以看到这里的a是4字节, 但是b是16字节。 b=a+4(vptr 对应B本身的虚拟表)+4(???) ,vs2013的内存布局里面这4个字节并没有体现出来。
博客上的解释是:对于虚继承,类B因为有自己的虚函数,所以它本身有一个虚指针,指向自己的虚表。另外,类B虚继承类A时,首先要通过加入一个虚指针来指向父类A,然后还要包含父类A的所有内容。因此是4(char[3] 对齐)+4(a)+8=16。我个人认为还是取决于实现机制,g++的sizeof就完全不考虑虚函数表所占的内存。
2、typedef:用来声明一个别名,typedef后面的语法,是一个声明。
(1)、区分#define
(2)、type (*)(….)函数指针 和type (*)[]数组指针
3、赋值运算符函数
void f1(int a[])
{ int i=0; int len=6; for(;i<len;i++){ a[i]=i+10; }
void main(){
int a[5]={1,2,3,4,5};
f1(a);
}
-
构造函数: a("123")
-
拷贝构造函数: String d = a; 等价于 String d(a);
-
赋值运算符: c = a;