非静态成员引用必须与特定对象相对

数据成员可以分静态变量、非静态变量两种.

**静态成员:**静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配内存,所以静态成员不能访问非静态的成员…因为静态成员存在于内存,所以非静态成员可以直接访问类中静态的成员.

非成静态员:所有没有加Static的成员都是非静态成员,当类被实例化之后,可以通过实例化的类名进行访问..非静态成员的生存期决定于该类的生存期…而静态成员则不存在生存期的概念,因为静态成员始终驻留在内容中…

eg:

#include<string>
#include<iostream>
using namespace std;
class TextBlock
{public:TextBlock():text("hello") {}const char& operator[](size_t position) const{ return text[position]; }char& operator[](size_t position){ return text[position]; }/* static */ void print(const TextBlock& tb){ cout << tb[0]; }
private:string text;
};int main()
{TextBlock B;TextBlock::print(B);/* B.print(B); */system("pause");
}

在VS2013里输入以上代码会报错:非静态成员引用必须与特定对象相对。

类的成员有两种:静态成员和实例成员(包括实例和函数)。实例成员的存储空间属于具体的实例,不同实例(对象)的同名成员拥有不同的存储空间;静态成员的存储空间是固定的,与具体的实例(对象)无关,被该类的所有实例共享。

访问静态成员可以用ClassName::MemberName,也可以用ClassName.MemberNme,但最好用前者,因为很容易就可以判定成员是静态成员。

访问实例成员只能用ClassName.MemberName,不能用ClassName::MemberName.

本例中就是因为用ClassName::MemberName访问实例变量出错。

所以解决方法是:将以上类的成员函数print声明为static。或者函数调用时用ClassName.MemberName的方式。

c++ :静态函数的应用相关推荐

  1. 堆栈,静态变量和普通变量,静态函数和普通函数的区别

    首先简单介绍一下堆和栈的区别. 1.内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1).栈区(stack)- 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似 ...

  2. C语言中static的作用及C语言中使用静态函数有何好处

    转自:http://www.jb51.net/article/74830.htm 在C语言中,static的作用有三条:一是隐藏功能,二是保持持久性功能,三是默认初始化为0. 在C语言中,static ...

  3. class function,delphi静态函数的对象基址分析static

    为什么80%的码农都做不了架构师?>>>    最近设计测试用例, 不必重新编译,填入需要测试API调用,点按钮call. 本设计分层: stdcall实现,涉及到入栈出栈返回值问题 ...

  4. static的三种用法,定义静态变量,静态函数,静态代码块!

    static的三种用法,定义静态变量,静态函数,静态代码块! 1.定义静态变量 class PersonStatic { //静态变量的特点 //1.静态变量无需生成对象就可被调用,可以使用类名和对象 ...

  5. python 类函数 成员函数_python中的类函数、静态函数、成员函数以及类变量、成员变量...

    1 classMethodDemo():2 classVar = 'This is a class variable' #类变量,可在类函数或者成员函数中引用,为所有实例共有的 3 def __ini ...

  6. 关于类的非静态函数指针成员变量

    每个类的非静态成员函数都含有一个指向被调用对象的指针,这个指针被称为this. 在非const成员函数中它的类型是指向该类类型的指针. 在const 成员函数中是指向const 类类型的指针. 在vo ...

  7. 静态函数一个有用的设计模式

    静态函数一个有用的设计模式 public class WardEntity : PositiveEntity { public static WardEntity GetWard(Vec3 aPos, ...

  8. 静态函数造成GC的原因

    静态函数造成GC的原因 有时候用deep profiling查看GC时会发现:一个父函数有GC,展开子层级看到一个很奇怪的 CX::ctor,表示CX进行了构造,然后打开父函数代码却完全看不到有new ...

  9. 如何让API回调你的VC类成员函数而不是静态函数

    首先需要包含一个由yzwykkldczsh同志编写的模板类-----万能多用自适应无限制回调模板(为纪念友人fishskin,此模板又称为H>W模板) /******************** ...

  10. 内联函数与普通函数、成员函数与静态函数的区别(知识整理)

    内联函数与普通函数的区别 普通函数在编译的过程中由编译器将函数体放入代码段,在调用函数过程中先进行参数的压栈,然后根据函数的调用地址调用函数,并执行,函数返回后执行出栈操作,这样就会有一个调用的过程, ...

最新文章

  1. 大数据分布式集群搭建(6)
  2. 58一面:Redis数据更新,是先更新数据库还是先更新缓存?
  3. 公钥密码-非对称加密算法
  4. .configure
  5. project 2013 显示标题
  6. linux常用命令-压缩解压命令
  7. access设置0字段为null是因为类型转换失败_Apache Pulsar 2.6.1 版本正式发布:2.6.0 加强版,新增 OAuth2 支持
  8. ffmpeg抓取rtsp流并保存_详细解析RTSP框架和数据包分析(1)
  9. 任何时间都是送给我们的最好礼物
  10. html中一个页面大概多少px,当屏幕 (浏览器窗口) 小于 768px, 每一列的宽度是 100% -HTML教程_小白教程_css5.net...
  11. Sqlserver 索引
  12. Atitit.导出excel报表的设计与实现java .net php 总结
  13. C# 操作Excel文件之NPOI (一)
  14. windows 键盘快捷键
  15. 倾向值匹配法的概述和应用+倾向值分析:统计方法与应用
  16. CMU 15213:attack实验
  17. Papi酱: 左手奶瓶右手尿布× 左手papitube右手娱乐圈√
  18. excel设置自动排序123的详细教程
  19. 用 .pth 文件附加 Python 模块搜索路径
  20. 学业水平计算机考试考点宣传标语,中考考点宣传标语(学生方面)

热门文章

  1. mysql 编译cpu数量_合适MySQL的Xeon 55XX系列CPU编译参数
  2. 【JUC并发编程12】Fork与Join分支
  3. Spring框架分为哪七大模块以及各模块的主要功能作用
  4. 在eclipse中输入.后提示解决
  5. java商城管理系统ssm_基于SSM+MYSQL的一个小型商城网站后台管理系统
  6. asin c语言中 返回值范围_asin()_C语言asin()详解:反正弦函数,求反正弦值
  7. (仿头条APP项目)1.app载入界面相关功能实现
  8. 跳表(SkipList)设计与实现(java)
  9. 杭电oj1003java实现
  10. mybatis中传入String类型参数的问题