静态成员(static的用法)

摘要:为实现一个类的多个对象之间的数据共享,C++提出了静态成员的概念,包括 静态数据成员静态成员函数;现在分别进行讨论:

  静态数据成员:格式如下:static  数据类型  数据成员名;

#include<iostream>
using namespace std;
class Node
{
private:
    double x_;
    double y_;
    static double E;            //节点处的弹性模量
public:
    Node(double x=0,double y=0)
    { x_=x;y_=y; }

    void disp(void)
    { 
        cout<<"\nthis="<<this<<" when x_="<<this->x_;
        cout<<"\nE="<<Node::E<<endl;
    }
};

double Node::E=90000000.0;        //静态数据初始化,位置比较特殊
int main()
{
    Node nod1(1,2),nod2(3,4);
    nod1.disp();
    nod2.disp();
    cout<<"\n";
    return 0;
}

  输出:

  为了既不使用全局变量破坏类的封装特性,又要实现类的对象之间的数据共享,使用静态成员(静态数据成员,静态成员函数)static是个好方法!

 

  静态成员函数:定义格式:static 返回类型 静态成员函数名(参数表);

  静态成员函数属于整个类,调用格式可以使 类名::静态成员函数名(实参表);静态成员函数的作用不是为了对象之间的沟通,而是为了处理静态数据成员

#include<iostream>
using namespace std;
class Node
{
private:
    double x_;
    double y_;
    static double E;            //节点处的弹性模量
public:
    Node(double x=0,double y=0)
    { x_=x;y_=y; }
    static void show(void);        //声明static函数
    /*{
        E+=10;
        cout<<"\nE="<<E<<endl;
    }*/
    void disp(void)
    { 
        cout<<"\nthis="<<this<<" when x_="<<this->x_;
        
    }

};
void Node::show(void)            //不加static,定义
{
    E+=10;                        //可以进行运算,静态成员函数就是处理静态数据成员的
    cout<<"\nE="<<E<<endl;
}

double Node::E=90.0;            //静态数据初始化,位置比较特殊
int main()
{
    Node nod1(1,2);
    nod1.show();
    cout<<"\n";
    return 0;
}

  输出:

  一般而言,静态成员函数不访问类中的非静态成员。如果确实需要,只能通过对象名(或对象指针,对象引用)访问该对象的非静态成员!

  例如在,上面的程序中如果改show();

void Node::show(void)            //不加static,定义
{
    E+=10;                        //可以进行运算,静态成员函数就是处理静态数据成员的
    cout<<"\nE="<<E<<endl;
    cout<<"\nx="<<x_<<endl;
}

  出错,不能访问x_;如果要使用x_,可以如下:

void Node::show(Node& nod)            //不加static,定义
{
    E+=10;                        //可以进行运算,静态成员函数就是处理静态数据成员的
    cout<<"\nE="<<E<<endl;
    cout<<"\nx="<<nod.x_<<endl;
}

  对应的修改声明,则可以编译成功,输出:

 

总结:静态数据成员实现对象之间的数据共享,静态成员函数用以处理静态数据成员,必要的时候静态成员函数可以通过对象名(或对象指针,对象引用)访问该对象的非静态成员!

 

posted @ 2014-12-14 10:52  mt.luo  阅读(948)  评论(0编辑  收藏  举报