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 发表评论
  • 相关阅读:
    征战蓝桥 —— 2015年第六届 —— C/C++A组第5题——九数组分数
    征战蓝桥 —— 2015年第六届 —— C/C++A组第5题——九数组分数
    征战蓝桥 —— 2015年第六届 —— C/C++A组第4题——格子中输出
    SSLZYC 邮票
    SSLZYC 道路阻塞
    SSLZYC 反射
    SSLZYC 家族
    秒杀系统架构分析与实战
    工厂模式
    工厂模式
  • 原文地址:https://www.cnblogs.com/liyuxia713/p/2540797.html
Copyright © 2011-2022 走看看