标签: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; }
输出:
为了既不使用全局变量破坏类的封装特性,又要实现类的对象之间的数据共享,使用静态成员(静态数据成员,静态成员函数)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; }
对应的修改声明,则可以编译成功,输出:
总结:静态数据成员实现对象之间的数据共享,静态成员函数用以处理静态数据成员,必要的时候静态成员函数可以通过对象名(或对象指针,对象引用)访问该对象的非静态成员!
标签:style blog http io color os 使用 sp 数据
原文地址:http://www.cnblogs.com/mt-luo/p/4162304.html