struct和class区别
- 关于函数:在C语言中,定义是面向过程的,所以,数据和操作都是分开的,C语言中的struct不能写函数,而C++中则可以
- 关于继承:继承只能是在C++中,struct 默认的是public,而class 默认的是private,在c++ 的class中,数据是具有隐私的,默认情况下,不能让其他人进行访问的。构造函数必须是public的。
struct和union区别
- 储存:编译器会对struct每个成员分配内存,而union则只会对最后一个成员进行储存,所用成员共享内存。
- 修改值:对于union来说,修改成员的值时,由于共享内存,会对其他成员进行重写,而struct则互不影响。
#include<iostream> using namespace std; union A { int a; int b; }; int main() { cout << "union A 的大小是:" << sizeof(A) <<"字节"<< endl; A a; a.a = 0; cout << "a = " << a.a << ", b = "<<a.b << endl; a.b = 1; cout << "a = " << a.a <<", b = " << a.b << endl; return 0; }
- 内存对齐方式:对于union来说呢,占用的内存是最大类型,同时要考虑对齐方式,应该是对齐字节的整数倍;
#include<iostream> using namespace std; union A { char a[13]; int b; }; int main() { cout << "union A 的大小是:" << sizeof(A) <<"字节"<< endl; return 0; }
-
对齐方式是int的4字节,最大的内存是13,所以结果是16
-
-
struct按照顺序放置元素,每次期望下一个采用上一个的内存大小,如果不够,则增加。
-
#include<iostream> using namespace std; struct s1 { char a; double b; int c; char d; }; struct s2 { char a; char b; int c; double d; }; int main() { cout << sizeof(s1) << endl; // 24 cout << sizeof(s2) << endl; // 16 return 0; }