20170508

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 }

原文地址:https://www.cnblogs.com/dongjian16/p/6826962.html