c++ :静态函数的应用
非静态成员引用必须与特定对象相对
数据成员可以分静态变量、非静态变量两种.
**静态成员:**静态类中的成员加入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.内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1).栈区(stack)- 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似 ...
- C语言中static的作用及C语言中使用静态函数有何好处
转自:http://www.jb51.net/article/74830.htm 在C语言中,static的作用有三条:一是隐藏功能,二是保持持久性功能,三是默认初始化为0. 在C语言中,static ...
- class function,delphi静态函数的对象基址分析static
为什么80%的码农都做不了架构师?>>> 最近设计测试用例, 不必重新编译,填入需要测试API调用,点按钮call. 本设计分层: stdcall实现,涉及到入栈出栈返回值问题 ...
- static的三种用法,定义静态变量,静态函数,静态代码块!
static的三种用法,定义静态变量,静态函数,静态代码块! 1.定义静态变量 class PersonStatic { //静态变量的特点 //1.静态变量无需生成对象就可被调用,可以使用类名和对象 ...
- python 类函数 成员函数_python中的类函数、静态函数、成员函数以及类变量、成员变量...
1 classMethodDemo():2 classVar = 'This is a class variable' #类变量,可在类函数或者成员函数中引用,为所有实例共有的 3 def __ini ...
- 关于类的非静态函数指针成员变量
每个类的非静态成员函数都含有一个指向被调用对象的指针,这个指针被称为this. 在非const成员函数中它的类型是指向该类类型的指针. 在const 成员函数中是指向const 类类型的指针. 在vo ...
- 静态函数一个有用的设计模式
静态函数一个有用的设计模式 public class WardEntity : PositiveEntity { public static WardEntity GetWard(Vec3 aPos, ...
- 静态函数造成GC的原因
静态函数造成GC的原因 有时候用deep profiling查看GC时会发现:一个父函数有GC,展开子层级看到一个很奇怪的 CX::ctor,表示CX进行了构造,然后打开父函数代码却完全看不到有new ...
- 如何让API回调你的VC类成员函数而不是静态函数
首先需要包含一个由yzwykkldczsh同志编写的模板类-----万能多用自适应无限制回调模板(为纪念友人fishskin,此模板又称为H>W模板) /******************** ...
- 内联函数与普通函数、成员函数与静态函数的区别(知识整理)
内联函数与普通函数的区别 普通函数在编译的过程中由编译器将函数体放入代码段,在调用函数过程中先进行参数的压栈,然后根据函数的调用地址调用函数,并执行,函数返回后执行出栈操作,这样就会有一个调用的过程, ...
最新文章
- 大数据分布式集群搭建(6)
- 58一面:Redis数据更新,是先更新数据库还是先更新缓存?
- 公钥密码-非对称加密算法
- .configure
- project 2013 显示标题
- linux常用命令-压缩解压命令
- access设置0字段为null是因为类型转换失败_Apache Pulsar 2.6.1 版本正式发布:2.6.0 加强版,新增 OAuth2 支持
- ffmpeg抓取rtsp流并保存_详细解析RTSP框架和数据包分析(1)
- 任何时间都是送给我们的最好礼物
- html中一个页面大概多少px,当屏幕 (浏览器窗口) 小于 768px, 每一列的宽度是 100% -HTML教程_小白教程_css5.net...
- Sqlserver 索引
- Atitit.导出excel报表的设计与实现java .net php 总结
- C# 操作Excel文件之NPOI (一)
- windows 键盘快捷键
- 倾向值匹配法的概述和应用+倾向值分析:统计方法与应用
- CMU 15213:attack实验
- Papi酱: 左手奶瓶右手尿布× 左手papitube右手娱乐圈√
- excel设置自动排序123的详细教程
- 用 .pth 文件附加 Python 模块搜索路径
- 学业水平计算机考试考点宣传标语,中考考点宣传标语(学生方面)
热门文章
- mysql 编译cpu数量_合适MySQL的Xeon 55XX系列CPU编译参数
- 【JUC并发编程12】Fork与Join分支
- Spring框架分为哪七大模块以及各模块的主要功能作用
- 在eclipse中输入.后提示解决
- java商城管理系统ssm_基于SSM+MYSQL的一个小型商城网站后台管理系统
- asin c语言中 返回值范围_asin()_C语言asin()详解:反正弦函数,求反正弦值
- (仿头条APP项目)1.app载入界面相关功能实现
- 跳表(SkipList)设计与实现(java)
- 杭电oj1003java实现
- mybatis中传入String类型参数的问题