C++类的静态成员
来源:互联网 发布:linux 拷贝命令 编辑:程序博客网 时间:2024/05/24 01:10
静态成员的特性:
不管这个类创建了多少个对象,而其静态成员只有一个拷贝(副本),这个拷贝被所有属于这个类的对象共享。
一、静态数据成员
定义格式:
static 数据类型 静态数据成员名;
初始化格式:
数据类型 类名::静态数据成员名 = 初始化值;
公有静态数据成员的访问格式:
1. 类名::静态数据成员名
2. 对象.静态数据成员名
3. 对象指针->静态数据成员名
说明:
1. 静态数据成员属于类,普通数据成员属于某一对象;
2. 在类中不给静态数据成员分配内存空间;
3. 静态数据成员与静态变量一样,是在编译时创建并初始化,它在该类的任何对象被建立之前就存在;
4. 静态数据成员不能在类中进行初始化,必须在类外的其他地方为它提供定义;一般在main()开始之前、类的声明之后的特殊地
带为它提供定义和初始化;
5. 私有静态数据成员不能被类外部函数访问,也不能用对象进行访问。
例子:
#include <iostream>using namespace std;class KMyClass{private:static int i; //声明i为私有静态数据成员public:static int j; //声明j为公有静态数据成员int Geti(){return i;}int Getj(){return j;}};int KMyClass::i = 0; //静态数据成员初始化int KMyClass::j = 0;int main(){KMyClass::j = 200; //公有静态数据成员可以在对象定义之前被访问cout<<"KMyClass::j = "<<KMyClass::j<<endl;KMyClass ob1, ob2;cout<<"ob1.i = "<<ob1.Geti()<<endl;cout<<"ob1.j = "<<ob1.Getj()<<endl;cout<<"ob2.i = "<<ob2.Geti()<<endl;cout<<"ob2.j = "<<ob2.Getj()<<endl;ob1.j = 300; //公有静态数据成员也可通过对象进行访问cout<<"ob1.j = "<<ob1.Getj()<<endl; //静态数据成员是对象的共享数据项cout<<"ob2.j = "<<ob2.Getj()<<endl;return 0;}
程序结果:
MyClass::j = 200;
ob1.i = 0;
ob1.j = 200;
ob2.i = 0;
ob2.j = 200;
ob1.j = 300;
ob2.j = 300;
二、静态成员函数
定义格式:
static 返回类型 静态成员函数名(实参表);
公有静态数据成员的访问格式:
1. 类名::静态成员函数名(实参表)
2. 对象.静态成员函数名(实参表)
3. 对象指针->静态成员函数名(实参表)
说明:
1. 静态成员函数可以定义成内嵌的,也可以在类外定义(在类外定义时,不要用static前缀);
2. 一般情况下,静态成员函数主要用来返回全局变量或同一个类中的静态数据成员(当它与静态数据成员一起使用时,达到了对同
一个类中对象之间共享数据进行维护的目的);
3. 编译系统将静态成员函数限定为内部连接,即,与现行文件相连接的其他文件中的同名函数不会与该函数发生冲突,维护了该函
数使用的安全性,这是使用静态成员函数的另一个原因;
4. 在一般的成员函数中,都隐含有一个this指针,用来指向对象自身,而在静态成员函数中是没有this指针的,因为它不与特定的
对象想联系,调用时使用如下格式较好: 类名::静态成员函数名();
5. 私有静态成员函数不能被类外部函数和对象访问。
例子:
#include <iostream> using namespace std;class Small_Cat{private:double weight;static double total_weight;static double total_number;public:Small_Cat(double w){weight = w;total_weight += w;total_number++;}void Display(){ cout<<"The small_cat weights "<<weight<<" pounds/n";}static void Total_Disp() //静态成员函数,显示小猫的只数和总重量{cout<<total_number<<" small_cat total weight "<<total_weight<<" pounds"<<endl;}};double Small_Cat::total_weight = 0;double Small_Cat::total_number = 0;int main(){Small_Cat w1(1.8), w2(1.6), w3(1.5);w1.Display();w1.Total_Disp();w2.Display();w2.Total_Disp();w3.Display();w3.Total_Disp();Small_Cat::Total_Disp();return 0;}
程序结果:
The small_cat weights 1.8 pounds
3 small_cat total weight 4.9 pounds
The small_cat weights 1.6 pounds
3 small_cat total weight 4.9 pounds
The small_cat weights 1.5 pounds
3 small_cat total weight 4.9 pounds
3 small_cat total weight 4.9 pounds
- 【C++】类的静态成员
- C++:类的静态类成员
- 【C++】类的静态数据成员
- 【c++】类的静态成员函数
- Objective-C类的静态数据成员
- 【C++】C++类的静态成员
- [c++]关于类的静态成员
- 类的 静态成员 --- 静态成员变量 、 静态成员函数
- C++---类中的静态成员
- C++:静态类成员函数
- 【C++】类的静态成员函数和静态成员变量的使用
- 类的静态成员
- 类的静态成员
- 类的静态成员
- 类的静态成员
- 类的静态成员
- 类的静态成员
- 类的静态成员
- 左连接、右连接和内链接(自然连接)
- C#编写一个控制台应用。输入一组整数,输出所有的奇数。
- u-boot-2009.08移植笔记二,平台TQ2440
- 计算机视觉 顶级研究团队之一
- u-boot-2009.08移植笔记三,平台TQ2440 .
- C++类的静态成员
- 【融博笔试题】查找单链表倒数第k个结点的值
- git常用命令-------自用-------持续更新中
- java初接触
- u-boot-2009.08移植笔记四,平台TQ2440 .
- JAVA学习第三回:JAVA语法基础:大致了解
- hdu3977 - fibonacci模p的周期
- 图
- u-boot-2009.08移植笔记五,平台TQ2440 .