码迷,mamicode.com
首页 > 其他好文 > 详细

静态成员(static的用法)

时间:2014-12-14 11:50:46      阅读:105      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   color   os   使用   sp   数据   

摘要:为实现一个类的多个对象之间的数据共享,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;
}

  输出:

bubuko.com,布布扣

  为了既不使用全局变量破坏类的封装特性,又要实现类的对象之间的数据共享,使用静态成员(静态数据成员,静态成员函数)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;
}

  输出:

bubuko.com,布布扣

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

  例如在,上面的程序中如果改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;
}

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

bubuko.com,布布扣

 

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

 

静态成员(static的用法)

标签:style   blog   http   io   color   os   使用   sp   数据   

原文地址:http://www.cnblogs.com/mt-luo/p/4162304.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!