C++静态成员和友元成员的理解

网友投稿 566 2022-11-17

C++静态成员和友元成员的理解

C++静态成员和友元成员的理解

面向对象程序设计课堂笔记

对静态成员的理解

在之前的学习过程中我们已经了解到模块数据的共享与保护机制,比如:数据成员对外不公开,对象里定义的变量也具有作用域等等。

对于一个类,函数成员是所有的对象相同的,而数据成员则是各自不同的。如果这时候我们引入了一个新的数据成员,对于所有的对象来说,他的值都是相同的,此时再去对每一个对象定义一次此数据成员则显得冗杂。由此,我们引入了静态数据成员。

根据上一段的解释,可以看出静态数据成员的简单定义:是类共有的数据,类的所有成员都维护这一个数据。

代码中这样定义:

class A{ private: int b;///一般数据成员 static int exnum;///静态数据成员}

对于程序中的模块,都会在内存中占据一定的存储空间,那么静态数据成员exnum又是如何存储的呢?

因为静态数据成员是类共有的成员,所以他不会占用对象的存储空间。可以结合下面的代码进行理解:

#includeusing namespace std;class A{ private: int b; static int exnum;};int main(){ A a; cout<

运行结果如图:

因为int类型的b在内存中占四个字节,也就说明了exnum并没有存储在对象a中。

具体有关的理解的博客:​​传送门​​

变量在使用前都需要初始化,这个也不例外。初始化的语法如下:

int A::exnum=0;

其中“::”是预作用符,表示后面的操作对象属于哪个类。

定义一个东西后,我们需要使用,那么我们如何访问这一成员呢。

通过之前的学习,我们可以知道下面的方式是可以访问exnum的:

#includeusing namespace std;class A{ private: int b; static int exnum; public: A(){exnum=exnum+1;}///构造函数 void shownum(){cout<<"当前的生存对象个数为:"<

以上方式是通过对象来访问静态成员,这也就说明了对象具有静态成员的访问权。

但是如果我们还没有构造对象,又该如何访问呢。

前面静态数据成员的定义已经指明,静态成员属于类,所以我们可以通过通过类名直接访问。理论上如果exnum是public的,这是可行的,但是exnum是私有的数据成员,由于模块的安全性,语法并不支持这种操作。

这时候我们希望某些函数的调用也不依赖于对象,就可以再引进一个静态函数了,与静态数据成员类似,这一函数也是属于类,由类直接调用。

代码如下:

#includeusing namespace std;class A{ private: int b; static int exnum; public: A(){exnum=exnum+1;}///构造函数 static void shownum(){cout<<"当前的生存对象个数为:"<

关于对友元函数的理解都在代码里了~

作业:

#includeusing namespace std;class StaticTest{public: StaticTest(int x, int y, int z); ///内联构造函数在类里的定义 void ObjectShowInfo(){ cout<<"("<

完结撒花~

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Linux-docker简介
下一篇:浅谈H5图片中object-fit的属性及含义/ 小程序image mode属性中scaleToFill,aspectFit,widthFix等类似
相关文章

 发表评论

暂时没有评论,来抢沙发吧~