zoukankan      html  css  js  c++  java
  • c/c++中的关键字(static、const、inline、friend)

    static:1、a、c语言中static修饰的局部变量在编译时赋初始值,只赋初始值一次,在函数运行时已有初值,每次调用函数时不用重新赋值,指示保留上次 函 数调用结束时的值。

                        如果定义局部变量不赋初值的话编译时自动赋值0或‘0’

                        在程序整个运行期间不释放,虽然在函数调用后仍存在,但其他函数不能引用它

                   b、全局变量是从变量定义出开始到本文件的末尾。

                   c、静态函数的作用于仅限于此文件,所以不用担心与同名的内部函数冲突。

              2、c++类的静态成员是该类型的所有对象所共享,存储在数据段,类的成员函数没有隐含的this指针,使用类名::函数名直接调用类的成员函数,Date::Display()

    const:1、a、c中常变量:  const 类型说明符 变量名。取代了C中的宏定义,声明时必须进行初始化(c++类中则不同)。const限制了常量的使用方 式,

                  并没有描述常量应该如何分配。如果编译器知道了某const的所有使用,它甚至可以不为该const分配空间。最简单的常见情况就是的值 在编译时已知,

                  而且不需要分配存储。C标准中,const定义的常量是全局的,C++中视声明位置而定。

                   b、常引用:  const 类型说明符 &引用名,int i = 10;const int& ri = i;//表示不能通过该引用去修改对应的内存的内容

                   c、常数组:  类型说明符 const 数组名[大小]    

                   d、常指针:  const 类型说明符* 指针名 ,类型说明符* const 指针名。

                                    char *const cp; //到char的const指针,cp不能指向别的字符串,但可以修改其指向的字符串的内容
                                    char const *pc1; //到const char的指针,*pc1的内容不可以改变,但pc1可以指向别的字符

                 2、a、c++常成员  函数:类名::Display(形参) const、const 修饰成员函数   void Display() const   ---修饰this指针所指的对象(编译器                                                                  处理为) --- > void Display(const Date*this) 调用成员数的对象在函数中不会被改变。

                                 const对象只能访问const成员函 数,而非const对象可以访问任意的成员函数,包括const成员函数;

                                 const对象的成员是不能修改的,而通过指针维护的对象确实可以修改的;
                                 const成员函数不可以修改对象的数据,不管对象是否具有const性质。编译时以是否修改成员数据为依据进行检 查         

    inline:inline函数,c++编译时会在调用内联函数的地方展开,没有函数压栈的开销,提高了效率

              1、inline函数的定义放在一起。    

              2、代码长或有递归或循环的不适宜用。

              3、对编译器只是一个建议。

              4、定义在类内的成员函数默认为内联函数

    friend:友元函数,在C++中友元函数允许在类外访问该类中的任何成员,就象成员函数一样,友元函数用关键字friend说明。

                1. 友元函数不是类的成员函数。
                2. 友元函数可以通过对象访问所有成员,私有和保护成员也一样。

                 class Date
                  {
                        friend void Display( const Date & d);
                       private :
                        int _year ; // 年
                        int _month ; // 月
                        int _day ; // 日
                };
               void Display (const Date& d)
               {
                      cout<<"year:" <<d. _year<< endl ;//调用私有成员
                      cout<<"month:" <<d. _month<< endl ;
                      cout<<"day:" <<d. _day<< endl ;
                }

               友元函数:友元类的每个成员函数都是另一个类的友元函数,可以访问另一个类的的私有成员,破坏了类的封装性

     

  • 相关阅读:
    MyDAL
    MyDAL
    MyDAL
    MyDAL
    MyDAL
    MyDAL
    MyDAL
    MyDAL
    MyDAL
    ThinkPad 安装 Ubuntu 18.10 系统 -- 高分屏各项配置与Nvdia独显驱动
  • 原文地址:https://www.cnblogs.com/-zyj/p/5740331.html
Copyright © 2011-2022 走看看