zoukankan      html  css  js  c++  java
  • 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 }

  • 相关阅读:
    Java DB 访问(三)mybatis mapper interface接口
    android stdio 安装后gradle 编译失败,设置代理不管用
    超星自动签到并邮件通知
    关于解决Mac使用docker安装SQL server for Linux 中文乱码问题
    Bom简单介绍
    grid-layout
    Position
    前端学习(注册表)
    关于学精通一门语言的个人看法(欢迎留言补充)
    Google 最新推出数据集搜索
  • 原文地址:https://www.cnblogs.com/dongjian16/p/6826962.html
Copyright © 2011-2022 走看看