当前位置:鱼C工作室 >C++ > 查看文章

静态属性和静态方法2 – C++快速入门22

静态属性和静态方法2

 

让编程改变世界

Change the world by program


 

静态方法

 

嗯,还是静态方法?!这阵子有鱼油表示对该方法的特色还是有点云里雾里还有那个神神兮兮的this指针。。。

所以小甲鱼保持务必让你彻底领悟的精神继续和大家探讨!

 

我们先来说说潜规则吧:

静态成员是所有对象共享的,所以不能再静态方法里访问非静态的元素。

非静态方法可以访问类的静态成员,也可以访问类的非静态成员。

 

为什么呢?

 

再论this指针

 

回顾下:

this指针是类的一个自动生成、自动隐藏的私有成员,它存在于类的非静态成员函数中,指向被调用函数所在的对象的地址。

当一个对象被创建时,该对象的 this指针就自动指向对象数据的首地址。

 

我们从一个比较有特色的例子来体会 this指针的工作原理:特色例子.txt

 

在任何一个方法里都可以使用 this 指针。从本质上讲,C++中的对象其实是一种特殊的结构 — 除了变量,还包含着一些函数的特殊结构。

在程序运行时,对象的属性(变量)和方法(函数)都是保存在内存里,这就意味着它们各自都有与之相关联的地址。

 

这些地址都可以通过指针来访问,而 this指针毋庸置疑是保存着对象本身的地址。

每当我们调用一个方法的时候,this指针都会随着你提供的输入参数被秘密的传递给那个方法。

正是因为如此,我们才能在方法里像使用一个局部变量那样使用 this指针。

 

因为静态方法不是属于某个特定的对象,而是由全体对象共享的,这就意味着它们无法访问 this指针。

所以,我们才无法在静态方法里访问非静态的类成员。

 

另外需要注意

 

在使用静态属性的时候,千万不要忘记为它们分配内存。具体做法很简单,只要在类声明的外部对静态属性做出声明(就像声明一个变量那样)即可。

静态方法也可以使用一个普通方法的调用语法来调用,但建议不要这么做,那会让代码变得更糟糕!

请坚持使用:ClassName::methodName();

请不要使用:objectName.methodName();


为您推荐

报歉!评论已关闭.