- const 成员变量
- 成员初始化列表
- 初始化成员列表的作用:
- 初始化成员列表初始化顺序:
- const 成员函数
- const 成员对象
- const常量
- 只读属性
- 正常使用,只读属性
- 只读属性可以去掉,间接修改const 成员变量 const_cost
(& 成员变量)
- 只能在类声明的时候初始化(c++11 可以),或者在初始化列表初始化
- 构造函数中不叫初始化,叫赋值,在进入构造函数里面的时候,编译器已经完成了对成员变量的分配空间和初始化。 所以在构造函数中,是对已经初始化好的变量进行赋值,而const 成员变量是常量,只能初始化,不能被赋值
代码块:
#includeusing namespace std; class conObj{ private: int m_val; string m_key; const int m_conVal; public: conObj(int val,string key,int conVal ):m_key(key),m_conVal(conVal) { string temp = m_key; cout << " conObj 构造函数: temp = " << temp < m_val = obj.m_val; this->m_key = obj.m_key; // this->m_conVal = obj.m_conVal; // 常量 不能被改变 return *this; } void pritObj() { cout << "m_val = " << m_val << ",m_key = " << m_key <<", m_conVal= " << m_conVal << endl; } int GetConVal( ) const { // m_val = 1000; //const 函数不能 调用普通成员变量 return m_conVal; } ~conObj(){} }; int main() { conObj a(100,"lilei",10); a.pritObj(); return 0; }
输出:
conObj 构造函数: temp = lilei //为什么能输出li lei m_val = 100,m_key = lilei, m_conVal= 10
成员初始化列表 初始化成员列表的作用:
- 初始化成员列表,在进入构造函数之前已经调用完成
使用成员初始化列表,在调用构造函数的分配内存空间的时候,直接初始化完成,不需要进入构造函数 赋值操作(效率高,特别在 嵌套类类初始化). 但是static 的成员变量不可以
初始化成员列表初始化顺序: 这里还有个问题可以记录一下,关于初始化列表的顺序:
// 只改构造函数
conObj(string key,int conVal ):m_key(key),m_conVal(conVal),m_val(m_conVal)
{
string temp = m_key;
cout << " conObj 构造函数: temp = " << temp <
输出
m_val = 任意值,m_key = lilei, m_conVal= 10
说明在 m_val 被m_conVal 赋值的时候,m_conVal还没被初始化
// 只改构造函数
conObj(string key,int conVal ):m_key(key),m_val(conVal),m_conVal(m_val)
{
string temp = m_key;
cout << " conObj 构造函数: temp = " << temp <
m_val = 10,m_key = lilei, m_conVal= 10
初始化列表的初始化顺序,跟变量在类中定义的顺序相同
const 成员函数
int GetConVal( ) const
{
// m_val = 1000; //const 函数只能读普通成员变量,不能修改普通成员变量
return m_conVal;
}
const 成员函数函数只能读普通成员变量,不能修改普通成员变量,成员函数中的变量不能被修改
const 成员对象
const conObj b(88,"lili",20);
//. b.pritObj(); // error
return 0;
const对象只能调用const成员函数
const常量
C++程序中只使用const常量而不使用宏常量,即用const常量完全取代宏常量。只读输入参数的时候,加const



