c语言static与integer,C++静态类成员

C语言中也用static来修饰变量,C++中除了修饰变量外还可以修饰类的成员:

修饰函数中的局部变量,这个变量在这个函数中,无论调用多少次都是共有的。

修饰全局变量,则这个变量在当前文件中有效。在另一文件中,即使是同一程序也不再有效。

修饰类的成员变量或成员函数,则这个类无论产生多少实例,这个成员都是共有的。

static修饰的变量的初始值为0。

在类的静态成员函数中不能使用this指针,也不能作成静态虚函数。

类的静态成员函数不能用const、volatile申明。

静态成员变量

下面演示静态成员变量的初始值、修改后的值和调用方法。

#include

#include

using namespace std;

class classA {

static int sx;

static string sstr;

public:

static int sy;

void set(int x, string s) {

sx = x;

sstr = s;

}

void print() {

cout << " x = " << sx ;

cout << " y = " << sy ;

cout << " s = " << sstr << endl;

}

};

//下面的申明是必须的,这样不会改变访问权限(public,private)

int classA::sx;

string classA::sstr;

int classA::sy;

int main ( )

{

classA ca1, ca2;

cout << "ca1: ", ca1.print(); //实例1的初始值

cout << "ca2: ", ca2.print(); //实例2的初始值

ca1.set(25, "C语言中文网"); //设定实例1,实例2 也会改变

ca1.sy = 100; //公有静态成员可以通过实例来设定

cout << "ca1: ", ca1.print(); //实例1的设定值

cout << "ca2: ", ca2.print(); //实例2的设定值

ca2.set(80, "C++ 60分钟入门教程"); //设定实例2,实例1 也会改变

classA::sy = 125; //公有静态成员也可以不通过实例来设定

cout << "ca1: ", ca1.print(); //实例1的设定值

cout << "ca2: ", ca2.print(); //实例2的设定值

return 0;

}

运行结果:

ca1:   x = 0  y = 0  s =

ca2:   x = 0  y = 0  s =

ca1:   x = 25  y = 100  s = C语言中文网

ca2:   x = 25  y = 100  s = C语言中文网

ca1:   x = 80  y = 125  s = C++ 60分钟入门教程

ca2:   x = 80  y = 125  s = C++ 60分钟入门教程

静态成员函数

笔者多年从事Java程序设计,按Java的经验,静态成员函数一般在公共程序中用的比较多。这样的程序与类自身关系不大,只是归类性质放在某个类中。还有一些与类转换或交换但不需要实例时使用的情况。

#include

using namespace std;

class Integer {

public:

static int atoi(const char *s) {

return ::atoi(s);

}

static float atof(const char *s) {

return ::atof(s);

}

};

int main ( )

{

int x = Integer::atoi("322");

float y = Integer::atof("3.14");

cout << "x = " << x << " y = " << y << endl;

return 0;

}

运行结果:

x = 322  y = 3.14

类的静态常数

和静态成员变量类似功能,当不允许修改时,要定义成常数。

#include

using namespace std;

class Integer {

public:

static const int MAX_LEN = 100;

static const int MIN_LEN = 10;

};

//以下的申明不需要

//int Integer::MAX_LEN;

//int Integer::MIN_LEN;

int main ( )

{

cout << "MAX_LEN = " << Integer::MAX_LEN << endl;

cout << "MIN_LEN = " << Integer::MIN_LEN << endl;

return 0;

}

运行结果:

MAX_LEN = 100

MIN_LEN = 10

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值