首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++(静态成员)

C++(静态成员)

作者头像
用户2617681
发布2019-08-08 11:27:08
7270
发布2019-08-08 11:27:08
举报
文章被收录于专栏:秘籍酷秘籍酷

static在C语言中的作用,简要地说就是为了让同名的变量或函数在各个文件之间彼此隔绝,打消他们之间的互相影响。而在C++中,static除了这样的作用之外,还多了一项非常重要的功能——定义类的属性和行为,这是基于对象程序设计的一个不可或缺的要素。

所谓的static静态成员,就是类似下面这样的东西:

class kitty { public: static int count; double weight; static int getCount(){return count;} void eat(); };

上面的count和getCount()就是静态成员数据静态成员方法,我们掌握这静态成员分两步走:第一,彻底搞清楚语法细节。第二,彻底搞清楚内在涵义。

来第一步。

静态数据必须在类外初始化(const型数据除外),未初始化的话不能访问。这个跟C语言中的静态变量不同(静态变量未初始化的话会被自动初始化为0,还记得吗?),上述的count可以在类外初始化,像这样:

int kitty::count = 0;

类外初始化时,不能指定static关键字(static修饰静态成员只能放在类内部),另外还需加上域解析符(kitty::)。

静态方法getCount()的定义区域比较宽松,既可以在类内部,也可以在类外部。但是静态方法只能引用静态数据,只能调用其他静态方法,比如上面的示例中,getCount()方法只能访问count数据,访问其他的非静态数据或者调用其他的非静态方法都会报错

静态数据和静态成员都可以被对象引用(当然必须是public权限模式才可以),但是要记住,所有的对象共用这些静态数据和方法,也就是说,一个对象如果可以直接修改某个静态数据,那么其他对象是立即可见的。

使用域解析符来引用静态成员,比如:

kitty::count; kitty::getCount();

使用类对象来引用静态成员,比如:

kitty cuteCat; cuteCat.count; cuteCat.getCount();

以上就是静态类成员的语法点,记下他们是必须的,但对你设计程序代码并不会有多大的帮助,因为学习编程并不是为了考试,你必须理解这些语义机制背后的逻辑和内涵,只有那样他们才能为你所用,才能成为你私人武器库中的又一把利刃。

静态成员的内在涵义就是:他们是属于整个类的属性和行为,而不依存于任何一个具体的个体。比如当你在设计猫咪(kitty)这个类的时候,你想要统计所有猫咪的总数count,这个数值是整体属性,不依存于任何一只猫咪。

我们可以在不创建任何具体对象的情况下,引用静态成员,比如我身边一只猫也没有,但我依然可以询问猫咪的总数getCount(),但我绝不能询问猫咪的重量,也无法发起“吃”这样的行为。这就解释了为什么静态方法不能引用非静态成员的原因。

总之,厘清一个语法概念背后的逻辑内涵是更重要的,脱离了这个,记再多的语法也是白扯。后续的编程语言类文章,都遵循这个思路。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 秘籍酷 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档