c++中的结构,联合, 枚举
结构体:
1.定义结构体时与c完全相同,但在定义变量时, 类型可以省略struct关键字
2.c++中的结构体中,可以定义函数
3.空结构体在c++中大小是1,c中是0
联合:
在定义联合变量时,类型可以省略union
c++中可以定义匿名联合(突破编译器的一些限制)
1 #include <iostream>
2 using namespace std;
3
4 int main() {
5 union {
6 int m;
7 char d[4];
8 };
9 m = 0x31323334;
10 for(int i = 0; i <= 3; i++) {
11 cout << d[i] << " ";
12 }
13 cout << endl;
14 return 0;
15 }
枚举:enum
表达类型时,可以省略enum
c++中认为枚举时一个单独的类型,这里体现了c++的类型检查严格
枚举的本质是一个整数,不能给它赋值
c++中的bool类型
c中使用bool类型,需要引入stdbool.h
c++中不需要引用任何头文件,可以直接使用
bool类型四大假: false 0 ' ' NULL
c++中的符号替代
1 %:include <iostream>
2 using namespace std;
3
4 int main() <%
5 union <%
6 int m;
7 char d<:4:>;
8 %>;
9 m = 0x31323334;
10 for(int i = 0; i <= 3; i++) <%
11 cout << d<:i:> << " ";
12 %>
13 cout << endl;
14 return 0;
15 %>
c++中函数和c的区别
c++中的参数列表严格匹配,无参代表不能传任何参数,void依然可用
不再支持c中的隐式声明
函数不能省略返回值类型(c默认返回int类型, main函数除外)
c++中的函数重载 overload
在同一作用域中,函数名相同,参数列表不同的函数构成重载关系
参数列表不同:参数的类型 参数的个数不一致 参数列表的顺序
举例:
int getmax(int x, int y)
double getmax(int x, double y)
double getmax(double x, int y)
double getmax(double x, double y)
函数重载的原理
c语言在生成调用的函数名时只考虑函数的名字,不考虑参数列表。
getmax(int x,int y) ----> getmax
c++语言在生成调用的函数名时考虑了函数的名字,同样也考虑了参数列表。
getmax(int x, int y)----->_Z6getmaxii //getmax这个函数有6个字符,ii为参数列表为两个int
getmax(int x, double y)------>_Z6getmaxid
生成汇编 gcc -S ***.c 生成的.s文件 vi **.s文件
g++ -S ***.cpp
重载引入的问题,以及解决方案
如何让c++程序调用或者生成函数名时按照c编译器的方式
extern "C" getmax(int x, int y);
1 #include <iostream>
2 using namespace std;
3 extern "C" int getmax(int x, int y) {
4 return x > y ? x : y;
5 }
6 double getmax(int x, double y) {
7 return x > y ? x : y;
8 }
9 int main() {
10 getmax(1, 2);
11 return 0;
12 }
能不能不引入c头文件的情况下调用标准c的函数
memcpy c++调用
1 #include <iostream>
2 using namespace std;
3 extern "C" void* memcpy(void*, void*, size_t); //memcpy是用c定义的
4 int main() {
5 int var_x = 9527;
6 int var_y = 2017;
7 memcpy(&var_y, &var_x, 4);
8 cout << "var_y = "<< var_y << endl;
9
10 }