C++基本之--静态成员函数和静态成员变量
2024-09-01 22:39:57
#include <iostream>
using namespace std; class Internet
{
public:
Internet(char *name,char *address)
{
strcpy(Internet::name,name);
strcpy(Internet::address,address);
count++;
}
static void Internet::Sc()//静态成员函数
{
cout<<count<<endl;
}
Internet &Rq();
public:
char name[20];
char address[20];
static int count;//这里如果写成static int count=0;就是错误的 ( 编译器规定的!)
}; Internet& Internet::Rq()//返回引用的成员函数
{
return *this;
} int Internet::count = 0;//静态成员的初始化
void vist()
{
Internet a1("中国软件开发实验室","www.cndev-lab.com");
Internet a2("中国软件开发实验室","www.cndev-lab.com");
}
void fn(Internet &s)
{
cout<<s.Rq().count;
}
int main()
{
cout<<Internet::count<<endl;//静态成员值的输出
vist();
Internet::Sc();//静态成员函数的调用
Internet b("中国软件开发实验室","www.cndev-lab.com");
Internet::Sc();
fn(b);
cin.get();
}
上面代码我们用了几种常用的方式建立对象,当建立新对象并调用其构造函数的时候,静态成员cout便运行加1操作,静态成员的初始化应该在主函数调用之前,并且不能在类的声明中出现,通过运行过程的观察我们发现,静态成员count的状态并不会随着一个新的对象的新建而重新定义,尽而我们了解到类的静态成员是属于类的而不是属于哪一个对象的,所以静态成员的使用应该是类名称加域区分符加成员名称的,在上面的代码中就是Internet::count,虽然我们仍然可以使用对象名加点操作符号加成员名称的方式使用,但是不推荐的,静态态类成员的特性就是属于类而不专属于某一个对象。
静态成员函数的特性类似于静态成员的使用,同样与对象无关,调用方法为类名称加域区分符加成员函数名称,在上面的代码中就是Internet::Sc();,静态成员函数由于与对象无关系,所以在其中是不能对类的普通成员进行直接操作的。
如果上面的 static void Internet::Sc()修改成为:
static void Internet::Sc()//静态成员函数
{
cout<<name<<endl;//错误
cout<<count<<endl;
}
静态成员函数与普通成员函数的差别就在于缺少this指针,没有这个this指针自然也就无从知道name是哪一个对象的成员了。
根据类静态成员的特性我们可以简单归纳出几点,静态成员的使用范围:
1.用来保存对象的个数。
2.作为一个标记,标记一些动作是否发生,比如:文件的打开状态,打印机的使用状态,等等。
3.存储链表的第一个或者最后一个成员的内存地址。
最新文章
- [Q&;A] C1DataGrid 奇葩的 BeginNewRow() 方法
- Easyui dialog中嵌入iframe
- 电容参数:X5R,X7R,Y5V,COG 详解
- 【原创】Kakfa cluster包源代码分析
- Python学习(14)模块二
- Linux 多核下绑定硬件中断到不同 CPU(IRQ Affinity) 转
- 在iframe下的页面锚点失效问题,用jquery进行修复
- .NET设计模式(16):模版方法(Template Method)(转)
- iOS开发常用国外网站清单
- linux下启动和关闭网卡命令及DHCP上网
- 使导出excle文档实现ALT+Enter的效果()
- linux新建磁盘并分区
- objective-c 中代码块(blocks)
- 《Mastering Opencv ...读书笔记系列》车牌识别(II)
- 剑指offer 整数中1 出现的次数
- 深入理解Python的字符编码
- Tensorflow数学运算
- 两台Linux机器传送文件
- Cylinder Candy(积分)
- java 标准异常