C++(三十二) — 常對象、常成員變量、常成員函數


  常量:對於既需要共享、又需要防止改變的數據。在程序運行期間不可改變。

  const 修飾的是對象中的 this 指針。所以不能被修改。

  this指針存在於類的成員函數中,指向被調用函數所在的類實例的地址。

1、常對象

   數據成員值在對象的整個生存期內不能改變。在定義時必須初始化,而且不能被更新。

   常對象,只能調用常成員函數,保證常對象的數據成員不被改變。

class point
{
public:
    point(int i, int j)
    {
        x = i, y = j;
    }
private:
    int x, y;
};
// 定義常對象
point const a(3, 4); // 定義時,初始化

2、常成員變量

     常數據成員,一經初始化就不可改變。構造函數對其進行初始化,只能通過初始化列表。

  通常把常數據成員定義為靜態成員,使其成為類的一個常量。

     初始化實例:

class circle
{
public:
    circle(int r, int i);
    void print();
private:
    int ri;
    const int a;
    static const float pi; //靜態常數據成員
};
// //靜態常數據成員,類外初始化
const float circle::pi = 3.14;
// 常數據成員只能通過初始化列表,獲得初值
// a 為常成員數據,不能把 a=i 寫到構造函數體內,必須通過初始化列表獲取初值 // 普通成員也可在初始化列表中賦值
circle::circle(int r, int i) :a(i), ri(r)
{
}

void circle::print() 
{
    cout << ri << endl;
}
void main()
{
    circle x(100, 0);
    x.print();
    system("pause");
    return;
}

3、常成員函數

const修飾常成員函數,寫在什么位置沒有關系。

修飾的是this 指針所指向的內存空間,不可以改變。

 

void OpVar(int a, int b) const
{
    a = 100;
    this->b = 200;// 會報錯,不可更改

}

 

 

 

class R
{
public:
    R(int ra, int rb)
    {
        r1 = ra; r2 = rb;
    }
    void change(int, int);
    void print() const; // 定義常成員函數
private:
    int r1, r2;
};

void R::change(int a, int b)
{
    r1 = a; r2 = b;
}
void R::print() const
{
    cout << r1 << ", " << r2 << endl;
}
void main()
{
    R a(5, 4);
    a.print(); // 調用常成員函數 print()
    // 定義常對象,不可調用普通函數 change()
    const R b(20, 25);
    b.print();// 調用常成員函數 print()
    system("pause");
    return;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM