C++类静态成员的初始化
来源:互联网 发布:mysql的exists 编辑:程序博客网 时间:2024/06/06 09:17
#include<iostream>
usingnamespacestd;
classtest
{
public:
staticint num;
};
inttest::num = 0;
void main()
{
cout<<test::num <<endl;
test::num = 20;
cout<<test::num <<endl;
}
一般地静态数据成员在该类定义之外被初始化如同一个成员函数被定义在类定义之
外一样,在这种定义中的静态成员的名字必须被其类名限定修饰,如上例中的
inttest::num = 0;
与全局对象一样对于静态数据成员在程序中也只能提供一个定义,这意味着静态数据成员的初始化不应该被放在头文件中而应该放在含有类的非inline函数定义的文件中, 静态数据成员可以被声明为任意类型它们可以是const 对象数组或类对象等等
#include<string>
class Account {
// ...
private:
staticconststring name;
};
conststring Account::name("Savings Account");
作为特例有序型的const 静态数据成员可以在类体中用一常量值初始化, 例如如果决定用一个字符数组而不是string 来存储账户的姓名那么我们可以用int型的const数据成员指定该数组的长度例如:
// 头文件
class Account {
// ...
private:
staticconstint nameSize = 16;//好像vc下不支持这样
staticconstchar name[nameSize];
};
// 文本文件
constint Account::nameSize;// 必需的成员定义
constchar Account::name[nameSize]="Savings Account";
但是因为这个静态数据成员的初始值是在类体中指定的, 所以在类定义之外的定义不能指定初始值, 因为name 是一个数组不是有序类型所以它不能在类体内被初始化, 任何试图这么做的行为都会导致编译时刻错误例如:
class Account {
// ...
private:
staticconstint nameSize = 16;// ok: 有序类型
staticconstchar name[nameSize]= "Savings Account";// 错误
};
const char Account::name[nameSize] = "Savings Account";
nameSize 没有被类名Account 限定修饰. 尽管nameSize是私有成员, 但是name的定义仍没有错, 怎么会这样? 如同类成员函数的定义可以引用类的私有成员一样静态数据成员的定义也可以引用静态数据成员, name 的定义是在它的类的域内当限定修饰名Account::name被看到之后它就可以引用Account 的私有数据成员
转自:http://blog.sina.com.cn/s/blog_6f6769b50100mub3.html
- 类的静态成员初始化
- 类的静态成员初始化。
- 静态成员的初始化顺序(C#,java)
- 静态初始化类成员
- C++类中静态成员的初始化
- 有关类的静态成员初始化
- C++类静态成员的初始化
- C++类静态成员的初始化
- C++类静态成员的初始化
- C++类静态成员的初始化
- C++类中静态成员的初始化
- C++类静态成员的初始化
- C++类静态成员的初始化
- c++类中静态成员的初始化
- C++类静态成员的初始化
- C++ 静态成员的类内初始化
- C++类的静态成员初始化
- 关于类的静态成员初始化
- 玩转Android之Activity详细剖析
- Android实现在线播放音乐
- Form客制化_快速导出功能_开发
- easyui datagrid 表格组件列属性formatter和styler使用方法
- iOS开发系列--打造自己的“美图秀秀”
- C++类静态成员的初始化
- 可笑的Android开发者--远离智能机
- 如何将PDF转换成PPT的操作步骤
- android平台tcpdump wireshark 网络数据抓包(综合)
- 微软记事本所谓的“编码格式” 和文件头
- 框架类中删除菜单项(来自MSDN)
- Android JSON解析
- 有关数据库 行 锁 的几个问题(rowlock) 行锁的基本说明: SELECT au_lname FROM authors WITH (NOLOCK) 锁定提示
- leetcode ||66、 Plus One