首页 > 代码库 > 静态成员(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的用法)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。