浅谈C++中类的const成员变量,static成员变量和const static成员变量的区别
来源:互联网 发布:淘宝卖家如何拉黑买家 编辑:程序博客网 时间:2024/05/02 00:26
1. const成员变量
1. const成员变量需要在实例化类对象时由构造函数进行初始化。
推荐做法是在构造函数中的初始化列表进行初始化,这一点是和引用类型的成员是一致的。
2. 因为是const类型,一旦类对象构造完成,const成员即不可修改。
3. 因为是成员变量,所有类外不具有访问权限。
class Student{public:Student(const std::string& name, int age): m_name(name), m_age(age){}~Student(){}private:const std::string m_name;int m_age;};
这是推荐的构造函数书写方式。
2.static成员变量
1. static成员变量虽叫成员变量,但它非类对象所有,而属于类所有。该类所有对象对它都具有访问权限
(前提条件:必须将其声明为public,当然,既然是共有,也应该将其声明为public)。
2. 它在类对象生成前就已经构造完成。可以对其进行修改。
3. static成员变量的初始化(或者叫赋值)需要放在类外进行。
4. 如果类声明放在.h文件中,那么static成员变量的初始化需要放在.cpp中。
class Student{public: Student(const std::string& name, int age) : m_name(name), m_age(age) { ++m_stuCnt; } ~Student(){}public: static int m_stuCnt; // 声明private: const std::string m_name; int m_age;};// 初始化int Student::m_stuCnt = 0; // 无需加static关键字
对于static成员变量的访问方式有以下二种:
类名::static变量名(强烈推荐)
对象名.static变量名
3.static const(const static)成员函数
1. static const和const static顺序不一样,效果一样。
2. static const成员变量属于类所有,所有类成员都其都具有访问权限。同static成员变量
3. static const成员变量一旦赋值后,其值不可修改。
4. static const int类型成员变量可以在类中进行赋值,也可在类外赋值。
(对于static const推荐在类型进行赋值)
补充:除了static const int类型成员变量可以在类中直接赋值,
double、float、long等静态常量成员都可以在类中进行赋值。
详细内容可以参考
STL源码剖析 1.9.3节 ”静态常量整数成员在class内部直接初始化“
class Student{public: Student(const std::string& name, int age) : m_name(name), m_age(age) { ++m_stuCnt; } ~Student(){}public: static int m_stuCnt; // 声明 static const int m_maxStuCnt = 50; // 方法1private: const std::string m_name; int m_age;};// 初始化int Student::m_stuCnt = 0; // 无需加static关键字
<pre name="code" class="cpp">class Student{public: Student(const std::string& name, int age) : m_name(name), m_age(age) { ++m_stuCnt; } ~Student(){}public: static int m_stuCnt; // 声明 static const int m_maxStuCnt; // 方法2private: const std::string m_name; int m_age;};// 初始化int Student::m_stuCnt = 0; // 无需加static关键字int const Student::m_maxStuCnt = 50; // 方法2 必须加const关键字(const在int前也行)
- 浅谈C++中类的const成员变量,static成员变量和const static成员变量的区别
- 类的const static 成员变量
- 类的const成员变量、static const、static成员变量的初始化
- 类的const成员变量、static const、static成员变量的初始化
- C++中static const类成员变量
- static const 类中 成员变量的问题
- static const 型成员变量的初始化
- C++中类const、static、static const成员变量
- c++类中static、const、static const成员变量初始化
- c++类中const/static/const static成员变量初始化
- const static const static成员变量的初始化
- 类static 成员变量,const成员变量,static const 成员变量
- static与const成员变量
- C++static / const /static const 型成员变量
- 初始化const, static, const static, static const成员变量
- 初始化const, static, const static, static const成员变量
- 类内const static(static const)成员变量初始化问题
- 类的const变员变量和static成员变量的初始化总结
- Codeforces 7E
- 图结构练习——判断给定图是否存在合法拓扑序列
- java设计模式之观察者模式
- Hexagon的程序执行顺序(一)
- VMWare虚拟机下为Ubuntu 配置静态IP(NAT方式)
- 浅谈C++中类的const成员变量,static成员变量和const static成员变量的区别
- markdown学习笔记
- hdu 5379 Mahjong tree DFS 心塞,比赛时没取模 2015 Multi-University Training Contest 7
- C#高级编程---暂停计划
- python2.7学习笔记(1) ——简介、安装、输入输出
- Hadoop学习1_在使用命令行运行WordCount时,遇到的jar命令说明
- "performSelector may cause a leak because its selector is unknown"警告原因及其解决办法
- 原型模式、模板模式
- 1- Two Sum