网易首页 > 网易号 > 正文 申请入驻

3.4静态成员变量和静态成员函数

0
分享至

3.4静态成员变量和静态成员函数

基本概念

静态成员:在说明前面加了static关键字的成员。

class CRectangle

{

private:

int w, h;

static int nTotalArea; //静态成员变量

static int nTotalNumber;

public:

CRectangle(int w_,int h_);

~CRectangle();

static void PrintTotal(); //静态成员函数

};

基本概念:

普通成员变量每个对象有各自的一份,而静态成员变量一共就一份,为所有对象共享。sizeof 运算符不会计算静态成员变量。

class CMyclass {

int n;

static int s;

};

则 sizeof( CMyclass ) 等于 4。

基本概念:

普通成员变量每个对象有各自的一份,而静态成员变量一共就一份,为所有对象共享。普通成员函数必须具体作用于某个对象,而静态成员函数并不具体作用与某个对象。因此静态成员不需要通过对象就能访问。

如何访问静态成员

类名::成员名

CRectangle::PrintTotal();

对象名.成员名

CRectangle r; r.PrintTotal();

指针->成员名

CRectangle * p = &r; p->PrintTotal();

引用.成员名

CRectangle & ref = r; int n = ref.nTotalNumber;

基本概念:

静态成员变量本质上是全局变量,哪怕一个对象都不存在,类的静态成员变量也存在。静态成员函数本质上是全局函数。设置静态成员这种机制的目的是将和某些类紧密相关的全局变量和函数写到类里面,看上去像一个整体,易于维护和理解。

静态成员示例

考虑一个需要随时知道矩形总数和总面积的图形处理程序,可以用全局变量来记录总数和总面积,用静态成员将这两个变量封装进类中,就更容易理解和维护。

class CRectangle

{

private:

int w, h;

static int nTotalArea;

static int nTotalNumber;

public:

CRectangle(int w_,int h_);

~CRectangle();

static void PrintTotal();

};

CRectangle::CRectangle(int w_,int h_)

{

w = w_;

h = h_;

nTotalNumber ++;

nTotalArea += w * h;

}

CRectangle::~CRectangle()

{

nTotalNumber --;

nTotalArea -= w * h;

}

void CRectangle::PrintTotal()

{

cout << nTotalNumber << "," << nTotalArea << endl;

}

int CRectangle::nTotalNumber = 0;

int CRectangle::nTotalArea = 0;

必须在定义类的文件中对静态成员变量进行一次说明

//或初始化。否则编译能通过,链接不能通过。

int main()

{

CRectangle r1(3,3), r2(2,2);

//cout << CRectangle::nTotalNumber; // Wrong , 私有

CRectangle::PrintTotal();

r1.PrintTotal(); 输出结果:

return 0;

2,13

}

注意事项:

在静态成员函数中,不能访问非静态成员变量,也不能调用非静态成员函数。

void CRectangle::PrintTotal()

{

cout << w << "," << nTotalNumber << "," << nTotalArea << endl; //wrong

}

CRetangle::PrintTotal(); //解释不通,w 到底是属于那个对象的?

CRectangle::CRectangle(int w_,int h_) {

w = w_;

h = h_;

nTotalNumber ++;

nTotalArea += w * h;

}

CRectangle::~CRectangle()

{

nTotalNumber --;

nTotalArea -= w * h;

}

void CRectangle::PrintTotal()

{

此CRectangle类写法,

有何缺陷?

cout << nTotalNumber << "," << nTotalArea << endl;

}

有何缺陷?

cout << nTotalNumber << "," << nTotalArea << endl;

}

CRectangle类时,有时会调用复制构造函数生成临时的隐藏的CRectangle对象,调用一个以CRectangle类对象作为参数的函数时,调用一个以CRectangle类对象作为返回值的函数时,临时对象在消亡时会调用析构函数,减少nTotalNumber 和nTotalArea的值,可是这些临时对象在生成时却没有增加 nTotalNumber 和 nTotalArea的值。

解决办法:为CRectangle类写一个复制构造函数。

CRectangle :: CRectangle(CRectangle & r )

{

w = r.w; h = r.h;

nTotalNumber ++;

nTotalArea += w * h;

}

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
笑岔气了!今晚,董宇辉让小贝吃荔枝,可就在小贝伸手拿荔枝时

笑岔气了!今晚,董宇辉让小贝吃荔枝,可就在小贝伸手拿荔枝时

楚楚的留香
2024-05-22 17:09:12
24名台湾人命丧千岛湖,台湾通灵师:死者前世皆水匪,今世遇复仇

24名台湾人命丧千岛湖,台湾通灵师:死者前世皆水匪,今世遇复仇

阿胡
2024-05-18 13:26:30
中方要求以色列停止军事进攻拉法,立即开放全部陆路过境点

中方要求以色列停止军事进攻拉法,立即开放全部陆路过境点

金羊网
2024-05-22 09:56:13
茅塞顿开15个人性智慧

茅塞顿开15个人性智慧

户外阿崭
2024-05-12 17:15:27
投资挪威航运银行!英超金靴、曼城球星哈兰德“场外”新闻来了! | 航运界

投资挪威航运银行!英超金靴、曼城球星哈兰德“场外”新闻来了! | 航运界

航运界
2024-05-22 19:06:21
成都人民公园树上惊现大蛇,它是哪种蛇?无毒却有个暴脾气

成都人民公园树上惊现大蛇,它是哪种蛇?无毒却有个暴脾气

大宗看萌宠
2024-05-22 14:42:44
笑不活了!卫健委发催二胎宣传片,网友评论区,各种花式拒绝

笑不活了!卫健委发催二胎宣传片,网友评论区,各种花式拒绝

阿燕姐说育儿
2024-05-18 15:19:22
罗玉凤:别再太偷拍我了,因为丑照,现在没有中国人愿意和我结婚

罗玉凤:别再太偷拍我了,因为丑照,现在没有中国人愿意和我结婚

东篱畔
2024-05-22 00:38:45
女人在过夫妻性生活时,为什么总发出声音?医生:大多数人不了解

女人在过夫妻性生活时,为什么总发出声音?医生:大多数人不了解

皮皮讲文
2024-01-02 10:36:17
日本高中50%中国留学生,大量中国留学生卷到日本引发日媒关注!

日本高中50%中国留学生,大量中国留学生卷到日本引发日媒关注!

日本物语
2024-05-19 18:24:47
美国忽然改口不再支持菲律宾,马科斯慌了

美国忽然改口不再支持菲律宾,马科斯慌了

寒山远殆
2024-05-22 10:41:24
儿媳照顾50岁农村公公,酒后公公行夫妻之事,公公:儿媳经验丰富

儿媳照顾50岁农村公公,酒后公公行夫妻之事,公公:儿媳经验丰富

魅老八足球
2024-05-13 13:49:37
高速别停砸车男被抓后,湖南公安沦陷,知情人曝内幕,果然有情况

高速别停砸车男被抓后,湖南公安沦陷,知情人曝内幕,果然有情况

校长侃财
2024-05-21 22:43:16
广东省纪委监委通报,两名区委书记被查

广东省纪委监委通报,两名区委书记被查

法制社会报
2024-05-22 11:45:04
看了陈婉珍,再看朱玲玲,我发现:有富贵相的女人,都有3个特征

看了陈婉珍,再看朱玲玲,我发现:有富贵相的女人,都有3个特征

白宸侃片
2024-05-20 16:26:33
这是150年前的上海?6座城门还未拆,南京路上没有游客

这是150年前的上海?6座城门还未拆,南京路上没有游客

图馆
2024-04-23 16:19:40
历史首人!文班亚马新秀赛季入选最佳防守一阵

历史首人!文班亚马新秀赛季入选最佳防守一阵

直播吧
2024-05-22 02:18:13
新东方:教唆46名孩子说谎,赴美被拒签,践踏诚信,别想再来了

新东方:教唆46名孩子说谎,赴美被拒签,践踏诚信,别想再来了

大风文字
2024-05-21 06:44:20
安徽30岁女博士怀孕后瘫痪,被丈夫无情抛弃,8年后逆风翻盘

安徽30岁女博士怀孕后瘫痪,被丈夫无情抛弃,8年后逆风翻盘

纵横三千年
2024-05-22 19:30:03
台海观澜|赖清德4年任内,两岸会不会有大事发生

台海观澜|赖清德4年任内,两岸会不会有大事发生

经济观察报
2024-05-21 11:39:08
2024-05-22 20:14:44
爱你雅课
爱你雅课
科普知识,科教视频
213文章数 623关注度
往期回顾 全部

科技要闻

微软给用户更多理由回到 Windows

头条要闻

19岁女孩订婚十多天后投河自杀:彩礼27万 一直想退婚

头条要闻

19岁女孩订婚十多天后投河自杀:彩礼27万 一直想退婚

体育要闻

官方:橡树资本接管国米 8年苏宁时代结束

娱乐要闻

乔欣助理离职大爆料!涉及明星超10位

财经要闻

理想不再“理想”

汽车要闻

舒适价值拉满 奇瑞风云T9售12.99-16.99万元

态度原创

艺术
家居
数码
本地
公开课

艺术要闻

穿越时空的艺术:《马可·波罗》AI沉浸影片探索人类文明

家居要闻

化实为虚 理性与柔美的交互

数码要闻

微软+高通真爱!ASR自动超分仅限骁龙X Elite:AMD/Intel都不行

本地新闻

强制措施展铁腕 “交叉执行”勇亮剑

公开课

近视只是视力差?小心并发症

无障碍浏览 进入关怀版