现在的位置: 首页 > 综合 > 正文

c++ 类中 静态变量和静态函数

2013年02月26日 ⁄ 综合 ⁄ 共 1288字 ⁄ 字号 评论关闭

#include <iostream>
using namespace std;

 

class Static{
public:
        Static(int, int, int);
        ~Static(){}
        int Getsum();
private:
        int x;
        int y;
        int z;
        static int sum;
};

int Static::sum = 0;
Static::Static(int newx, int newy, int newz)
{
       x = newx;
       y = newy;
       z = newz;
       //如果在这里计算sum的值时,而在Getsum()函数中只是返回sum的值,则在执行完构造函数a(1,1,1)是sum值为3
       //接着执行构造函数b(2,2,2),这以后sum的值变为6,static型的,所有的sum都为6
       //sum = x + y + z;
}
int Static::Getsum()
{
      sum = x + y + z;
      //在执行a.Getsum()时,sum = 3;返回值为3;然后又执行b.Getsum(),sum = 6,返回值为6;
      //对象a中的sum也变为了6,但是a.Getsum()的返回值不变
      return sum;
}

//****************************************
class M
{
public:
        M(int a);
        static void f1(M m); //静态函数有一个类参数
private:
        int A;
        static int B;
};

 

M::M(int a)
{
        A = a;
        B += a;
}
void M::f1(M m)
{
        cout << "A = " << m.A << endl; //调用类中的非静态成员要用通过对象调用
        cout << "B = " << B << endl;
}
int M::B = 0;
//*****************************************
int main()
{
      Static a(1,1,1),b(2,2,2);   //只执行了Static类的构造函数,子函数Getsum()并未执行
      cout << a.Getsum() << endl; //执行了a的Getsum()函数,返回值输出返回值,而不是最后的static型的sum的值
      cout << b.Getsum() << endl; //执行了b的Getsum()函数,返回值输出返回值,而不是最后的static型的sum的值
      cout << a.Getsum() << endl; //输出的是a.Getsum()的返回值,而不是sum的值

      M::f1(x1);    //调用静态函数时不能用对象调用,因为静态函数不属于某一个对象
      M::f1(x2);    //它是属于类的,不能用对象调用,只能用类调用

 

      return 0;
}

 

抱歉!评论已关闭.