zoukankan      html  css  js  c++  java
  • 类static成员

    static成员引进:有时特定类的全体对象需要访问一个全局对象。

    为什么用static成员而不是全局对象?

           ---- static对象名字在类作用域中,可以有效避免命名冲突,并且清晰显示程序意图。

           ---- 可以实施封装(static成员可以定义为private,而全局对象不可以)

    如何调用?     ---- class A a; A::static_mem; a.static_mem;

    声明和定义

           ---- static成员函数在类定义体内部外部定义均可。在类定义体外定义时不加(不可以加)static修饰。

           ---- static数据成员必须在类定义体外部定义(正好一次)(在类定义体外声明并定义)

                  class A{public : static int n;} int A::n = 10;

           ---- const static数据成员可以(也可以不)在类定义内初始化,但必须在类定义体外部重新声明(不可以加static修饰符,不可以赋初值)

    static数据成员其他特性:

           ----一般地,在类的内部不能有该类类型的变量(或函数形参),最多只能有该类类型的指针或引用做变量类型(或函数形参).  static数据成员则不受这个限制。

           ---- 类的static数据成员可以作为函数默认实参 

           ---- static成员的继承:如果基类有static成员,则整个继承层次中只有一个这样的成员。每个static成员总是只有一个实例。
         

     1#include <iostream> 
     2#include <cstdlib>
     3
     4using namespace std; 
     5
     6class A
     7{
     8      //重载输出操作符 
     9      friend ostream& operator<<(ostream& outconst A&a)
    10      {
    11             out << a.m;
    12             return out;
    13      }

    14      
    15private:
    16        int m ;
    17 
    18public:
    19       A(int i) { m = i;}
    20       
    21       static int n;  
    22       
    23       static A a; //类可以有该类类型的static成员
    24       //A a1; //error. 类不可以有普通的该类类型的成员            
    25       
    26       static void func(A a) {cout << a << endl;} //类类型可以作为该类static函数的形参   
    27       
    28       //static 数据成员可以作为类成员函数的默认实参 
    29       static void func2(int i = n) { cout << i*<<endl;}    
    30}
    ;
    31
    32int A::n = 10;
    33A A::a(1);
    34
    35int main()
    36{
    37    cout << A::n << endl; //10
    38    cout << A::a <<endl; //1
    39    
    40    A a2(3); 
    41    A::func(a2); //3
    42    A::func2(); //100
    43 
    44    system("pause");
    45    return 0;
    46}
     



    幸运草 2010-01-08 12:22 发表评论
  • 相关阅读:
    LeetCode(287)Find the Duplicate Number
    LeetCode(290) Word Pattern
    LeetCode(205)Isomorphic Strings
    LeetCode(201) Bitwise AND of Numbers Range
    LeetCode(200) Number of Islands
    LeetCode(220) Contains Duplicate III
    LeetCode(219) Contains Duplicate II
    命令行执行Qt程序
    LeetCode(228) Summary Ranges
    redis 的安装和使用记录
  • 原文地址:https://www.cnblogs.com/liyuxia713/p/2540797.html
Copyright © 2011-2022 走看看