1.在类体中和类体外定义成员函数是有区别的:在类体中定义的成员函数为内联(inline)函数,在类体外定义的不是。内联函数一般不是我们所期望的,它会将函数调用处用函数体替代,所以我建议在类体内部对成员函数作声明,而在类体外部进行定义,这是一种良好的编程习惯。

2.static 成员变量

static 成员变量属于类,不属于某个具体的对象,这就意味着,即使创建多个对象,也只为 num 分配一份内存,所有对象使用的都是这份内存中的数据。当某个对象修改了 num,也会影响到其他对象。
static 成员变量必须先初始化才能使用,否则链接错误。例如:

int Student::num;  //初始化

也可以在初始化时赋初值:

int Student::num = 10;  //初始化同时赋值

初始化时可以不加 static,但必须要有数据类型。被 private、protected、public 修饰的 static 成员变量都可以用这种方式初始化。
注意:static 成员变量的内存空间既不是在声明类时分配,也不是在创建对象时分配,而是在初始化时分配。

static 成员变量既可以通过对象来访问,也可以通过类来访问。通过类来访问的形式为:

类名::成员变量;

例如:

  1. //通过类来访问
  2. Student::num = 10;
  3. //通过对象来访问
  4. Student stu;
  5. stu.num = 10;

  注意:static 成员变量与对象无关,不占用对象的内存,而是在所有对象之外开辟内存,即使不创建对象也可以访问。

  在类中,static 除了声明静态成员变量,还可以声明静态成员函数。普通成员函数可以访问所有成员变量,而静态成员函数只能访问静态成员变量。我们知道,当调用一个对象的成员函数(非静态成员函数)时,系统会把当前对象的起始地址赋给 this 指针。而静态成员函数并不属于某一对象,它与任何对象都无关,因此静态成员函数没有 this 指针。既然它没有指向某一对象,就无法对该对象中的非静态成员进行访问。可以说,静态成员函数与非静态成员函数的根本区别是:非静态成员函数有 this 指针,而静态成员函数没有 this 指针。由此决定了静态成员函数不能访问本类中的非静态成员。

最新文章

  1. Prototype之个人见解
  2. 团队开发——冲刺1.d
  3. c++ static及const(开发者在线)
  4. [AngularJS] Lazy loading Angular modules with ocLazyLoad
  5. C++的函数重载 转
  6. [Locked] Binary Tree Longest Consecutive Sequence
  7. IOS7最新的系统漏洞
  8. [原创]基于Zynq AXI-GPIO Standalone & Linux 例程
  9. Page.Cache
  10. mysql日常笔记(持续更新)
  11. Nginx报错:upstream timed out (110: Connection timed out)和client intended to send too large body【转】
  12. webpack快速入门——打包后如何调试
  13. CSRF攻击详解(转)
  14. Ubuntu下解决apt update时签名无效问题
  15. OkHttp3源码详解(三) 拦截器-RetryAndFollowUpInterceptor
  16. CodeForces 185A. Plant (矩阵快速幂)
  17. 给JSP应用提供JSTL支持(IntelliJ IDEA)
  18. Oracle Purge和drop的区别
  19. Entity Framework 四
  20. 重建二叉树_C++

热门文章

  1. VS 2015 localhost访问有效 改用 IP访问 400错误 invalid hostname 修改方法
  2. GDI+ 绘制经验
  3. 查询数据库表大小sql
  4. 为bootstrap添加更多自定义图标
  5. MSChart绘图控件中折线图和柱形图画法
  6. jacon
  7. 关于mongodb的复合索引新功能
  8. Go语言test之类方法测试
  9. mySql的学习心得
  10. 还有一个月,或者不到一个月就要期末了,复习ing