首页 > 代码库 > 静态成员(static的用法)

静态成员(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;}

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

 

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

 

静态成员(static的用法)