美文网首页
C++ STATIC

C++ STATIC

作者: 猩猩隊長 | 来源:发表于2018-11-04 22:25 被阅读0次

静态数据成员

静态成员可实现多个对象间的数据共享,不会破坏隐藏的原则
静态成员是类的所有对象共享的成员,而不是某个对象的成员
静态数据成员可以节省内存
静态数据成员在定义或说明时前面加关键字static

初始化的格式
<数据类型><类名>::<静态数据成员名>=<值>

注意事项

1.初始化在类体外进行,而前面不加static
2.初始化时不加该成员的访问权限控制符private,public等
3.初始化时使用作用域运算符来标明它所属类
4.静态数据成员是类的成员,而不是对象的成员
5.静态数据成员是静态存储,静态生存期,必须初始化

引用静态数据成员时,采用如下格式
<类名>::<静态成员名>

示例:

#include <iostream>
using namespace std;

class CStatic
{
public:
    CStatic(int a, int b, int c);
    void GetNumber();
    void GetSum();
private:
    int A, B, C;
    static int Sum;
};

int CStatic::Sum = 0; //静态数据成员类外且必须初始化

CStatic::CStatic(int a, int b, int c)
{
    A = a;
    B = b;
    C = c;
    Sum += A + B + C;
}

void CStatic::GetNumber()
{
    cout << "Number=" << A << "," << B << "," << C << endl;
}

void CStatic::GetSum()
{
    cout << "Sum=" << Sum << endl;
}

void main()
{
    CStatic M(3, 7, 10), N(14, 9, 11);
    M.GetNumber();
    N.GetNumber();

    /*M和N的GetSum()成员函数都会打印54
    说明静态成员变量对2个对象都有效
    也说明静态成员属于类,而不是某个特定的对象*/
    M.GetSum(); //54
    N.GetSum(); //54
    system("pause");
}

静态成员函数

和静态数据成员一样都属于类的静态成员,都不是对象成员
引用不需要用对象名
函数的实现中不能直接引用类中说明的非静态成员
可以引用类中说明的静态成员
若静态成员函数中要引用非静态成员时,可通过对象来引用

静态成员函数使用如下格式
<类名>::<静态成员函数名>(<参数表>);

示例

#include <iostream>
using namespace std;

class M
{
public:
    M(int a)
    {
        A = a;
        B += a;
    }
    static void f1(M m);
private:
    int A;
    static int B;
};

void M::f1(M m)
{
    cout << "A=" << m.A << endl;
    cout << "B=" << B << endl;
}

int M::B = 0;
void main()
{
    M P(5), Q(10);
    M::f1(P); //调用时不用对象名
    M::f1(Q);
    system("pause");
}

相关文章

网友评论

      本文标题:C++ STATIC

      本文链接:https://www.haomeiwen.com/subject/gjgdxqtx.html