C++入门--常成员函数

1.作用:无法修改数据成员,一般用来修饰Get的函数

2.本质:this指针类型:const T* const

3.意义:让编译器提醒开发者该函数不能修改类的成员变量,用于const对象(引用或指针)

看一个例子:

 1 #include <iostream>
 2 #include <string>
 3 using namespace std;
 4 
 5 class CInterger {
 6    public:
 7     CInterger(int nNumber) { m_nNumber = nNumber; }
 8     int GetNumber();
 9     void SetNumber(int nNumber) { m_nNumber = nNumber; };
10 
11    private:
12     int m_nNumber;
13 };
14 
15 int CInterger::GetNumber() { return m_nNumber; }
16 
17 int main(int argc, char const *argv[]) {
18     CInterger i = 1;
19     return 0;
20 }

在C++中,语法比较自由,可以在程序运行时利用指针改变程序任意处的内容

以上中,可知get方法只是获取成员变量,故不允许人为修改

使用常成员函数:

 1 #include <iostream>
 2 #include <string>
 3 using namespace std;
 4 
 5 class CInterger {
 6    public:
 7     CInterger(int nNumber) { m_nNumber = nNumber; }
 8     int GetNumber() const;  //常成员函数
 9     void SetNumber(int nNumber) { m_nNumber = nNumber; };
10 
11    private:
12     int m_nNumber;
13 };
14 
15 int CInterger::GetNumber() const {
16     // m_nNumber = 1;   Error:expression must be a modifiable lvalue
17     return m_nNumber; 
18      }
19 
20 int main(int argc, char const *argv[]) {
21     CInterger i = 1;
22     return 0;
23 }

const 常成员函数

  1.普通的类成员函数this指针类型: T*  const(表示该指针本身不能被修改)T为该类

    例如:SetNumber()的this指针类型为:CInterger* const;

  2.常成员函数this指针类型:const T* const

    1)表示该指针本身不能被修改

    2)表示指针指向的内容不能被修改

          this指针指向对象,所以常成员函数this指向的内容(成员变量)不能被修改

如何非的在常成员函数内修改成员变量?

  将类中的成员变量声明为mutable;

...
private:
    mutable int m_nNumber;

const常成员变量

 1 class CInterger {
 2    public:
 3     CInterger(int nNumber) { m_nNumber = nNumber; }
 4     int GetNumber() const;
 5     void SetNumber(int nNumber) { m_nNumber = nNumber; };
 6 
 7    private:
 8     int m_nNumber;
 9     const int m_nTest;   //error: uninitialized const member in ‘const int
10 };

常成员变量在定义的时候要初始化,因为其定义后不允许被修改。

const  int m_nTest = 1;

但是对于一些版本较低的编译器,不允许定义时初始化,所以可以用初始化列表的方式来初始化。

在构造函数后

    CInterger(int nNumber) : m_nTest(1),m_nNumber(2) { m_nNumber = nNumber; }

初始化列表:

1、可以用来初始化普通成员变量/常成员变量

2、通常用来构造有参数的成员对象

 1 #include <iostream>
 2 #include <string>
 3 using namespace std;
 4 
 5 class CTest {
 6    public:
 7     CTest(int m, int n) {
 8         m_n = n;
 9         m_m = m;
10     }
11    private:
12     int m_n;
13     int m_m;
14 };
15 
16 class CInterger {
17    public:
18     CInterger(int nNumber) : m_nTest(1), m_nNumber(2),t(22,33) { m_nNumber = nNumber; }
19     void SetNumber(int nNumber) { m_nNumber = nNumber; };
20 
21    private:
22    CTest t;
23     int m_nNumber;
24     const int m_nTest;
25 };
26 
27 int main(int argc, char const *argv[]) {
28     CInterger i = 1;
29     return 0;
30 }
原文地址:https://www.cnblogs.com/y4247464/p/13822275.html