C++静态成员
来源:互联网 发布:淘宝客服一般什么待遇 编辑:程序博客网 时间:2024/05/21 07:55
静态成员(数据成员和函数成员)
不管这个类创建了多少个对象,而静态成员只有一个副本,这个副本被所有本类对象共享。
(1) 静态数据成员
当这个类的第一个对象建立时,所有static数据都被初始化,并且,以后再建立对象时,不需再对其初始化。
当类中含static成员时,需要在函数外部对其进行初始化,格式为:type classname::staticfield = initValue; //也可以不对其赋值,此时将使用系统默认值或者默认构造函数
例如:
class test
{
public:
virtual ~test(){}
static int &getInstance(){return _instance;}
public:
static int _instance;
string testString;
test()
{
testString = "public string";
}
};
int i;
int test::_instance;
int main()
{
test *pIntrObj = new test();
printf("Intral Object Address: <%X>!\n", pIntrObj);
printf("static object Value: <%d>, Address: <%X>!\n", pIntrObj->_instance, &(pIntrObj->_instance));
pIntrObj->_instance = 1;
delete pIntrObj;
pIntrObj = NULL;
printf("External Object Value: <%d>, Address: <%X>!\n", test::_instance, &(test::getInstance()));
printf("i Address: <%X>!\n", &i);
getchar();
return 0;
}
(1)VS2005运行结果:
(2)如果去掉外部声明的“int test::_instance;”语句,将出现如下链接错误:
1>LINK : 没有找到 E:\testing\staticInstance\Debug\main.exe 或上一个增量链接没有生成它;正在执行完全链接
1>test.obj : error LNK2001: 无法解析的外部符号 "public: static int test::_instance" (?_instance@test@@2HA)
1>E:\testing\staticInstance\Debug\main.exe : fatal error LNK1120: 1 个无法解析的外部命令
解析:创建一个类对象,并不能同时创建static成员变量,static成员需要在使用该类之前初始化。
(3)修改代码:
int i;
int test::_instance;
int main()
{
printf("External Object Address: <%X>!\n", &(test::getInstance()));
printf("i Address: <%X>!\n", &i);
getchar();
return 0;
}
VS2005运行结果:
解析:静态成员变量与对象的创建没有关系,不受局部对象个数的限制。静态成员变量和静态成员函数可以看成:“类”这个大集体中的一个“小团体”,它们在函数外部单独初始化,并且占据全局的静态存储区域。所有本类对象共享静态成员变量。
疑问:在外部初始化static成员时,是否同时建立了一个类对象呢?——猜想:没有建立。
(2)静态成员函数
静态成员函数属于整个类,为此类所有对象共享。
一般的成员函数中都含有一个this指针,用来指向对象自身;而在静态成员函数中没有this指针,因为它无需判别究竟执行它的是哪一个对象,它是同类所有对象共享的资源,只有一个共用的副本。因此,一般静态成员函数都是访问静态数据成员或全局变量。如果要让静态成员函数访问普通数据成员,需要通过参数传递形式传递对象指针,以告知静态成员函数需要访问哪个对象的普通数据成员,形如obj.static_func(obj)。
注意:静态成员函数虽然不针对某一特定对象,但在使用时系统中必须已经存在该类对象。(静态数据成员在第一个对象建立时初始化) //这个是错误的!!!!
- C++_静态成员
- C++_静态成员
- C++_静态成员
- C++【静态成员】
- [C++] 静态成员函数
- C++-静态成员
- C++---静态成员
- c++--静态成员变量
- C++:静态成员与常成员
- C#—静态成员和实例成员
- C++static静态数据成员
- C++static静态成员函数
- C++---类中的静态成员
- 【C++】静态成员函数小结
- C++:静态类成员函数
- 【C++】类的静态成员
- C++——静态成员
- C/C++静态成员变量和静态成员函数
- SIP事务的理解
- Ubuntu 12.04 sudo 不输密码
- timus 1280 Topological Sorting
- 分布式数据库系统---商旅预定系统的实现(10)
- Linux网络编程系列-套接口选项控制
- C++静态成员
- 农夫养牛问题
- Java关键字final、static使用总结
- cmake2.8安装
- sublime text 2 中文输入法的安装方法 以及方法定位的安装方法
- 30个高质量的旅游网站设计
- QTextBrowser 小习
- 查看用户对象
- 文件属性和目录配置