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

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-04-30 21:11:16
王哲林官宣重要决定,去向曝光,或联手孙铭徽,上海遗憾

王哲林官宣重要决定,去向曝光,或联手孙铭徽,上海遗憾

保持热爱0263
2024-05-01 21:33:50
李斌看破不说破,一句话便道出真相!周鸿祎真实目的大揭秘!

李斌看破不说破,一句话便道出真相!周鸿祎真实目的大揭秘!

喜欢农家生活的阿繁
2024-05-01 22:39:48
中央海岸水手夺冠,泰山亚冠精英赛附加赛将战泰国杯赛冠军

中央海岸水手夺冠,泰山亚冠精英赛附加赛将战泰国杯赛冠军

懂球帝
2024-05-01 21:30:30
严惩韩德君!挥肘撞飞胡明轩3米远,不闻不问败人品,媒体人怒批

严惩韩德君!挥肘撞飞胡明轩3米远,不闻不问败人品,媒体人怒批

阿牛体育说
2024-05-02 00:12:30
乌军使用配备集束弹头的ATACMS导弹袭击俄军训练场,俄军伤亡惨重

乌军使用配备集束弹头的ATACMS导弹袭击俄军训练场,俄军伤亡惨重

山河路口
2024-05-01 20:53:48
反转!内蒙古一服务区“天价切糕”卖12000元?涉事网友爆料真相

反转!内蒙古一服务区“天价切糕”卖12000元?涉事网友爆料真相

火山诗话
2024-05-01 08:10:58
大胜广东,辽篮赢球功臣锁定,不是张镇麟,低迷之人被杨鸣怒批

大胜广东,辽篮赢球功臣锁定,不是张镇麟,低迷之人被杨鸣怒批

东球弟
2024-05-01 21:34:48
福建舰今日首次海试

福建舰今日首次海试

观察者网
2024-05-01 09:54:22
中方突然宣布“出手”,美方紧急向华“求饶”,中方态度让人害怕

中方突然宣布“出手”,美方紧急向华“求饶”,中方态度让人害怕

博文聊世界
2024-05-01 20:33:22
闹大了!小伙恶搞朱元璋“鞋拔子脸”,遭死亡威胁:侮辱明太祖?

闹大了!小伙恶搞朱元璋“鞋拔子脸”,遭死亡威胁:侮辱明太祖?

薛定谔的吃瓜猹
2024-05-01 10:50:57
究竟|未触发AEB?车门无法打开?山西问界M7事故争论到底在争什么

究竟|未触发AEB?车门无法打开?山西问界M7事故争论到底在争什么

澎湃新闻
2024-05-01 07:24:32
县公安局局长儿子调戏新上任女县长,一个月后,全县领导被双开

县公安局局长儿子调戏新上任女县长,一个月后,全县领导被双开

神奇的锤子
2024-04-29 01:56:35
中国好兄弟向美国倒戈?前脚骗中国供电,中方:必须严惩!

中国好兄弟向美国倒戈?前脚骗中国供电,中方:必须严惩!

星辰故事屋
2024-05-01 17:27:29
市场监管总局:对以人参、西洋参、灵芝为原料的保健食品实施备案管理

市场监管总局:对以人参、西洋参、灵芝为原料的保健食品实施备案管理

财联社
2024-04-30 20:06:39
媒体人:恩里克拿球能力是中乙级别,抢点攻门是比埃尔霍夫级别

媒体人:恩里克拿球能力是中乙级别,抢点攻门是比埃尔霍夫级别

直播吧
2024-05-01 21:40:48
大V预判:中国在制度和电力上优势明显,借助AI未来或成为前所未有的强国

大V预判:中国在制度和电力上优势明显,借助AI未来或成为前所未有的强国

老郭在学习
2024-05-01 08:48:09
周鸿祎无意戳破褚振亮“谎言”!一个说给了,另一个却还蒙在鼓里!

周鸿祎无意戳破褚振亮“谎言”!一个说给了,另一个却还蒙在鼓里!

娱乐圈的大爆炸
2024-05-01 21:09:38
战争打响!日本行动了!

战争打响!日本行动了!

大嘴说天下
2024-05-01 20:48:07
5月1日金价暴跌!今日金价暴跌!今日四大行、金店黄金价格走势!

5月1日金价暴跌!今日金价暴跌!今日四大行、金店黄金价格走势!

叮当当科技
2024-05-02 01:44:51
2024-05-02 06:38:44
爱你雅课
爱你雅课
科普知识,科教视频
213文章数 623关注度
往期回顾 全部

科技要闻

余承东卸任华为终端CEO 新任命为董事长

头条要闻

哥伦比亚总统宣布将与以色列断绝外交关系

头条要闻

哥伦比亚总统宣布将与以色列断绝外交关系

体育要闻

詹眉湖人:洛杉矶大型烟花秀

娱乐要闻

黄子韬被曝求婚徐艺洋 大量亲密照曝光

财经要闻

王石自动放弃2023年千万退休金

汽车要闻

预售2.89-3.49万 奔腾小马正式开启预售

态度原创

房产
本地
时尚
数码
游戏

房产要闻

单价2万内,装标4200+,主城改善大盘无套路硬刚!

本地新闻

食味印象 | 潍坊:碳水脑袋的人间乐园

小长假必备!五一出游超适合的单品和搭配!

数码要闻

五一如何“满电”出行?充电设备大部分人都选错了!

三国志11:刘璋能否趁着赤壁之战收编萌芽期的刘备,此章节真可以

无障碍浏览 进入关怀版