zoukankan      html  css  js  c++  java
  • C的声明与定义(Thinking C++)

    1 C的声明与定义
    声明是告诉编译器存在某一个函数或者变量
    定义是编译器为某一名称的函数或变量分配存储地址
    定义可以包括声明
    声明常常使用extern关键字,不带函数体的函数自动作为声明,可以理解为自动加上extern关键字。
    C++函数原型: 返回类型 函数名(<参数1类型>,<参数2类型>...);
    C++中函数声明至少是一个函数原型,函数定义时必须给出各个参数名
    C 和C++ 都允许对函数重复声明
     
    2 C++中,struct里面可以声明,定义函数,所声明的函数成为成员函数,成员函数的定义可以在结构体之外,定义:
     返回类型 结构体名称::函数名(参数表)
    {函数体};
    ::为C++的新定义的运算符,成为作用域限定符
     
    3 C++中如果一个结构体只有一个成员函数,那么sizeof得到的值是一个负数
     
    4 预处理防止重复声明结构体
    #ifndef FOO_H_
    #define FOO_H_
    // Rest of header here ...
    #endif // FOO_H_
     
    5 嵌套结构声明
    struct stack
    {
    /*在结构体stack内直接声明一个结构体link*/
    struct link
    {
    void* data;
    link* next;
    void initialize();
    }*head; //定义了link* 类型的一个名称为head的成员属性
     
    //初始化函数与link的initailize()函数不干扰
    void inititalize();
    void push();
    void peek();
    void pop();
    void cleanup();
    };
    各个函数的定义需要根据嵌套结构使用::进行定义函数
     
    6 全局范围分解
    在定义成员函数的时候,函数体里面的标识名如果不用作用域限定符::,则默认去检查结构体或者类里面是否有这个成员,如果没有则再去检查全局标识符是否有,但有时结构体和全局都有某个同名的标识符时,我们需要用到的是全局的标识符,则需要通过   ::标识名  来使用标识函数或变量,就是用过前面不加任何域的作用域运算符来指定标识,如
    int a;//全局变量a
    void f(); //全局函数f
    struct A
    {
        int a;
        void f();
    };
    void A::f()
    {
        ::a = 1; //对全局的赋值
        a = 2;//对结构体的成员变量a赋值
        ::f();    //调用全局函数
        f();//调用成员函数
     
    };
  • 相关阅读:
    面向过程--面向对象
    shiro有哪些组件?
    Redis的特点什么是?
    Spring Boot 有哪些优点?
    什么是 JavaConfig?
    HashMap和Hashtable的区别
    深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接
    Linux指令--tar,gzip
    JQuery 学习总结及实例
    $(this) 和 this 关键字在 jQuery 中有何不同?
  • 原文地址:https://www.cnblogs.com/cplover/p/3371901.html
Copyright © 2011-2022 走看看