C++静态成员和静态成员函数
一:静态数据成员:
类体中的数据成员的声明前加上static关键字,该数据成员就成为了该类的静态数据成员。和其他数据成员一样,静态数据成员也遵守public/protected/private访问规则。同时,静态数据成员还具有以下特点:
1、静态数据成员的定义。
静态数据成员实际是类域中的全局变量,其定义方式与全局变量相同。
例如:
class base
{
private:
static const int x;
};
const int base::x=; //初始化时不受private和protected访问限制
注意:不要试图在头文件中定义(初始化)静态数据成员。
2、静态数据成员被类的所有对象所共享,包括该类派生类对象。即派生类与基类共享基类的静态数据成员。这样的好处在于避免了基类和派生类重复定义相同的对象,节省内存空间。
例如:
class base
{
public:
static int x;
};
int base::x=; class derived:public base
{ }; int main()
{
base a;
derived b;
a.x++;
cout << a.x <<endl;
b.x++;
cout << b.x <<endl;
}
/// 结果为1,2;可见基类和派生类公用一个静态数据成员。
3、静态数据成员可以成为成员函数的可选参数,而普通数据成员则不可以。
例如:
class base
{
public:
static int x;
int y;
void fx1(int i=x); //正确,x为静态数据成员
void fx2(int i=y); //错误,y为普通数据成员
};
4、静态数据成员的类型可以是所属类的类型,而普通数据成员则不可以。普通数据成员只能声明为所属类类型的指针或引用。
class base
{
public:
static base x; //正确,静态数据成员
base xx; //错误
base *y; //正确,指针
base &yy; //引用
};
5、静态数据成员的值在const成员函数中可以被合法的改变。
例如:
class base
{
public:
base()
{
y=;
z=;
}
static int x;
mutable int y;
int z;
void test()const
{
x++; //正确,mutable数据成员,可变的
y++; //正确,static数据成员
z++; //错误
}
};
int base::x=;
二、静态成员函数。
1、静态成员函数的地址可用普通函数指针存储,而普通成员函数地址需要用类成员函数指针来存储。
2、静态成员函数不可以调用类的非静态成员函数,因为静态成员函数不含this指针。
3、静态成员函数不可以同时声明为virtual、const、volatile函数。
例如:
class base
{
virtual static void fun1(); //错误
static void fun2()const; //错误
static void fun3()volatile; //错误
};
4、静态成员与静态成员函数是可以独立访问的,也就是说,无需任何对象实例就可以访问。
C++静态成员和静态成员函数的更多相关文章
- c++——静态成员变量成员函数
静态成员变量成员函数 思考:每个变量,拥有属性.有没有一些属性,归所有对象拥有? 4.1静态成员变量 1)定义静态成员变量 关键字 static 可以用于说明一个类的成员, 静态成员提供了一个同类对象 ...
- C++ 类的静态成员及静态成员函数
对象与对象之间的成员变量是相互独立的.要想共用数据,则需要使用静态成员和静态方法. 只要在类中声明静态成员变量,即使不定义对象,也可以为静态成员变量分配空间,进而可以使用静态成员变量.(因为静态成员变 ...
- c++中静态成员变量 静态成员函数 全局变量与静态函数的关系 字符串中括号的匹配编程 (笔试经历)
笔试经历 1 类中的静态变量不能通过构造函数参数列表来初始化,因为静态变量不属于哪个对象.同时静态变量在不初始化的情况下系统会自动为变量赋值,数值型赋值为零,字符型赋值为空. 非静态变量只有在定义时才 ...
- c++,static 静态成员变量 / 静态成员函数
静态成员变量: //静态成员变量(static) // //1.如果想在同类的多个对象之间实现数据共享 ,可以用静态 //成员变量,即用static修饰的成员变量,例 static int a; // ...
- 34)static 静态成员和静态成员函数
1) static修饰的方法,只能在这个文件中使用,比如你是多文件编程,别的文件即使引入了我的 .h文件 但那时我的static方法也是不能用 2)C++的static的成员变量 比如 sta ...
- C++@类的静态成员变量和静态成员函数
参考: http://blog.csdn.net/morewindows/article/details/6721430 http://www.cnblogs.com/lzjsky/archive/2 ...
- C++学习10 static静态成员变量和静态成员函数
一般情况下,如果有N个同类的对象,那么每一个对象都分别有自己的成员变量,不同对象的成员变量各自有值,互不相干.但是有时我们希望有某一个或几个成员变量为所有对象共有,这样可以实现数据共享. 可以使用全局 ...
- C++类中的静态成员变量与静态成员函数
最近一直看c++相关的项目,但总是会被c++类中的静态成员变量与静态成员函数的理解感觉很是模糊,不明白为什么类中要是用静态成员变量.于是在网上搜集了一些资料,自己再稍微总结下. 静态成员的概念: 静态 ...
- C++静态成员函数不能调用非静态成员变量
其实我们从直观上可以很好的理解静态成员函数不能调用非静态成员变量这句话因为无论是静态成员函数还是静态成员变量,它们 都是在类的范畴之类的,及在类的整个生存周期里始终只能存在一份.然而非静态成员变量和非 ...
随机推荐
- mob免费短信验证码安卓SDK调用方法
很不错的一款免费验证码平台,支持IOS.安卓,比那些收费的稳定.开发容易.分享给大家,希望大家不要滥用 官网: http://mob.com/ 官方有开发文档,但是有几点要注意的官方没有提到,导致初始 ...
- BurpSuite抓App数据包的方法
软件准备: 1.猎豹wifi 2.BurpSuite或者fillder都可以 查看电脑IP地址: 网卡ip: 确保无线网卡的IP和手机的代理IP保持一致即可
- 苹果推送(APNs)ios push小结
把app删除后就推送不成功了,可以看出deviceToken应该是设备+app来一起识别的,重新安装后仍然为同一个 简介 推送服务APNs(Apple Push Notification servic ...
- JQ学习(二)
jQuery 效果 jQuery hide() 和 show() 语法: $(selector).hide(speed,callback); $(selector).show(speed,callba ...
- HTML5实践 -- 使用CSS3 Media Queries实现响应式设计
CSS3 Media用法介绍:http://www.w3cplus.com/content/css3-media-queries 转载请注明原创地址:http://www.cnblogs.com/so ...
- JQuery解析json数据
<script> var data ="{" + "root:[" + "{name:'1',value:'0'}," + &q ...
- codefroces 589A
time limit per testsecondsmemory limit per testmegabytesinputstandard inputoutputstandard outputPoly ...
- Django学习笔记之一
一.Windows下安装 Django 1.下载安装包解压后放到本地目录如C:\Django-1.7.2 官网地址:https://www.djangoproject.com/download/ 2. ...
- Git常用命令举例
clone一个git project到本地 git clone https://github.com/huahuiyang/network-certification.git 到这个目录下,可以发现有 ...
- ural 1075. Thread in a Space
1075. Thread in a Space Time limit: 1.0 secondMemory limit: 64 MB There are three points in a 3-dime ...