static 成员函数
和静态数据成员一样,静态成员函数是所有对象共享的,不是单独属于某一个对象,由于静态成员函数没有传递this指针,故static member function 只能访问static成员,不能访问非static 成员。但是非static却可以访问static 成员。
#include<iostream>
using namespace std;
class X{
int i;
static int j;
public:
X(int ii=) :i(ii){
j = i;//non-static member function can access static member function or data
}
int val()const{ return i; }
static int incr(){
//i++; Error:static member function can not access non-static member data
return ++j;
}
static int f(){
//!val() Error:static member function can not access non-static member function
return incr();
} };
int X::j = ;
int main(){
X x;
X* xp = &x;
x.f();
xp->f();
X::f();
system("pause");
return ; }
对象在访问静态成员时,可以通过点运算符和箭头运算符。这样就把静态成员函数与某一个对象相连接了,也可以直接用 className::static member fucntion name 的方式访问。
有时可以把构造函数设置成私有的,如下面的例子
class Egg{
static Egg e;
int i;
Egg(int ii) :i(ii){}
Egg(const Egg&);//prevent copy-construction
public:
static Egg* instance(){ return &e; }
int val()const{ return i; }
};
Egg Egg::e();
int main(){
//! Egg x(0); Error can't create an Egg
cout << Egg::instance()->val() << endl;
system("pause");
return ;
}
为了不让类可以拷贝创建对象,增加了一个私有的拷贝构造函数
Egg(const Egg&);//prevent copy-construction
这样类就不可以如下的创建对象了
Egg e=*Egg::instance();
static 成员函数的更多相关文章
- static成员函数
1.static成员函数不能定义为const的,这是因为static成员函数只是全局函数的一个形式上的封装,而且static成员函数不能访问类的非静态成员(没有this)指针,修改非静态数据成员又从何 ...
- C++中的static数据成员与static成员函数
本文要点: 1.static成员它不像普通的数据成员,static数据成员独立于该类的任意对象而存在,每个static数据成员是与类关联的对象,并不与该类的对象相关联! aka:每个static数据成 ...
- 【编程拾遗】C++的static成员函数与单例模式
static小结 static的引入 static 是C++中非经常常使用的修饰符,它被用来控制变量的存储方式和可见性. 函数内部定义的变量,在程序运行到它的定义处时,编译器为它在栈上分配空间,函数在 ...
- static成员函数不能调用non-static成员函数
1 一般类静态成员函数不能调用非静态成员函数 2 static成员函数可以调用构造函数吗? 答案是肯定的,由于static成员函数没有this指针,所以一般static成员函数是不能访问non-sta ...
- C++类中的static数据成员,static成员函数
C++类中谈到static,我们可以在类中定义static成员,static成员函数!C++primer里面讲过:static成员它不像普通的数据成员,static数据成员独立于该类的任意对象而存在, ...
- static 成员变量、static 成员函数、类/对象的大小
一.static 成员变量 对于特定类型的全体对象而言,有时候可能需要访问一个全局的变量.比如说统计某种类型对象已创建的数量. 如果我们用全局变量会破坏数据的封装,一般的用户代码都可以修改这个全局变量 ...
- C++ static成员变量与static成员函数
类中的静态成员真是个让人爱恨交加的特性.我决定好好总结一下静态类成员的知识点,以便自己在以后面试中,在此类问题上不在被动. 静态类成员包括静态数据成员和静态函数成员两部分. 一 静态数据成员: 类 ...
- static成员函数和static成员
C++的静态成员是和类关联的,它属于某个类,但是不属于某个特定的对象.静态成员变量只存储一份供所有对象共用.所以在所有对象中都可以共享它.使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则, ...
- static成员变量和static成员函数例程
#include "pch.h" #include <iostream> using namespace std; class goods { public: good ...
随机推荐
- Hbase简介安装配置
HBase —— Hadoop Database的简称 ,hbase 是分布式,稀疏的,持久化的,多维有序映射,它基于行键rowkey,列键column key,时间戳timestamp建立索引.它是 ...
- 31. centos 下修改oracle的编码
[root@localhost ~]# su - oracle[oracle@localhost ~]$ vi /home/oracle/.bash_profile # .bash_profile # ...
- 用Redis实现分布式锁 与 实现任务队列【转载】
这一次总结和分享用Redis实现分布式锁 与 实现任务队列 这两大强大的功能.先扯点个人观点,之前我看了一篇博文说博客园的文章大部分都是分享代码,博文里强调说分享思路比分享代码更重要(貌似大概是这个意 ...
- SQL 2012 分页取数据
,), data int ) select * from t1 row rows only create clustered index t1c on t1(id) declare @i int ) ...
- Activity服务类-5 IdentityService服务类
一.内置用户组(角色)设计表概念 用户和组(或者叫做角色),多对多关联,通过关联表实现 act_id_user 用户表: act_id_group 用户组表: act_id_membership 用户 ...
- greenlet 实现手动协程切换
from greenlet import greenlet def test1(): print('12') gr2.switch() #切换到gr2 print('34') gr2.switch() ...
- Linux tomcat启动慢, Creation of SecureRandom instance for session ID generation using [SHA1PRNG]took [xx] mil
启动慢的解决链接: http://blog.csdn.net/u011627980/article/details/54024974
- UI5-文档-4.35-Responsiveness
在这一步中,我们将改进应用程序的响应能力.SAPUI5应用程序可以在手机.平板电脑和桌面设备上运行,我们可以对应用程序进行配置,以便为每个场景充分利用屏幕空间.幸运的是,SAPUI5控件类似于sap. ...
- jquery 阻止冒泡事件和阻止默认事件
jQuery 冒泡和默认事件: <!DOCTYPE html> <html lang="en"> <head> <meta charset ...
- vim-git for window 默认编辑器
vim其实是linux的一个文本编辑器,所以 vi+文件名 后,其实是进入vi程序了.vi有两种模式,编辑模式和命令模式 在命令模式下,我们可以直接按 i ,此时就会切换到编辑模式,如上图,下方有个i ...