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++静态成员函数不能调用非静态成员变量
其实我们从直观上可以很好的理解静态成员函数不能调用非静态成员变量这句话因为无论是静态成员函数还是静态成员变量,它们 都是在类的范畴之类的,及在类的整个生存周期里始终只能存在一份.然而非静态成员变量和非 ...
随机推荐
- 如何修改 SQL Server 代理主作业 (Transact-SQL)
本主题介绍了如何使用存储过程修改 Microsoft SQL Server 代理主作业. 更改作业定义计划的详细信息 1. 执行 sp_update_schedule. 在作业中添加.更改 ...
- 【微信Java开发 --1---番外1】在windows下,使用JAVA执行多条DOS命令+文件夹/路径中有空格怎么解决【目的是实现内容穿透外网】
内网穿透外网的那一篇,参正集1 但是每次都要Ctrl+R 启动DOS窗口,也就是CMD,一句一句的去粘,略显繁琐. 所以将这些任务写在JAVA程序中,启动一次程序就可以实现[内网穿透]的功能,多好啊! ...
- Jmeter之参数化(五)
Jmeter用函数(__Random)批量添加的用法 首先点击 选项----->函数助手对话框-----> 这个是随机取值的意思 在这边输入取值的范围 然后点生成 即可 例如 从 数 ...
- DSP using MATLAB 示例 Example3.10
用到的性质 上代码: n = -5:10; x = rand(1,length(n)) + j * rand(1,length(n)); k = -100:100; w = (pi/100)*k; % ...
- Android HttpClient post MultipartEntity - Android 上传文件
转自[http://blog.csdn.net/hellohaifei/article/details/9707089] 在Android 中使用HttpClient,MultipartEntity ...
- 使用递推解题:EOJ2999
题目: Description 给定一个多项式 (ax+by)k,计算多项式展开后 xnym 项的系数. Input 第1行:一个整数T(1≤T≤10)为问题数. 接下来共T行.每行5个整数,分别为a ...
- storm UI
Storm UI ——本文主要解释下storm ui上各项属性的含义. 通过http://UI_Server:8080可以打开Storm Web UI看看Storm集群的状态. 1. mainpage ...
- pig相关
1. 重命名pig job name: 在Pig脚本中的一开始处,写上这一句: set job.name 'This is my job'; 2. 设置pig参数: 允许pig时,输入如下: pig ...
- Mongoose学习参考文档——基础篇
Mongoose学习参考文档 前言:本学习参考文档仅供参考,如有问题,师请雅正 一.快速通道 1.1 名词解释 Schema : 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力 Model ...
- select 支持宽高(高度有兼容问题);
<select size=1(默认) size=2 没有下拉效果> <option selected>12</option> <option selected ...