成人app

C++中常數據的使用及初始化

點擊打開在線編譯器,邊學邊練

成人app常數據成員的使用及初始化

 

成人app常的概念我們在學C語言時候就有了解,關鍵字是const,所謂的“常”,或或者說被“常”修飾的變量,是不可修改、被改變的,比如用const修飾的一個變量就成了常變量,這個值不可被更改。

成人app那么C++中,一樣有常的概念,額外不同的是,const除了可以修飾一般的變量為常變量之外,還可用于修飾某個對象,變成常對象。以及可以修飾類的數據成員和成員函數,分別叫做類的常數據成員和常成員函數。

下面,我們依次對常數據成員、常成員函數、常對象展開講解。

 

1. 常數據成員

 

成人app對于常數據成員的用法,與我們在C語言的用法一樣,只不過這部分數據出現在類里,使用的格式如下:

 

數據類型 const  數據成員名;

const  數據類型 數據成員名;

 

被const修飾的成員則必須進行初始化,并且不能被更改。

而初始化的方式則是在類的構造函數的初始化列表里進行的。

 

 

成人app另外,有一個特殊情況,如果成員是static類型,即靜態常數據成員,因為是靜態的屬性,初始化則需在類外進行初始化。

成人app下面我們把剛才講的情況放到代碼里來說明:

 

#include<iostream>
using namespace std;
class Clock
{
private:
    const int h;  //修飾h為常類型成員
    const int m;  //修飾m為常類型成員
    int const s;   //和上面兩種用法都可以
    static const int x;
public:
    Clock(int a,int b,int c):h(a),m(b),s(c)
    {
        cout<<"Constrctor! Called"<<endl;
    }
    int ShowTime()
    {
        cout<<h<<":"<<m<<":"<<s<<endl;
        return 0;
    }
    int GetX()
    {
        cout<<x<<endl;
        return 0;
    }
};
const int Clock::x = 99;
int main()
{
    Clock A(12,10,30);
    A.ShowTime();
    A.GetX();
    return 0;
}

 

運行演示結果:

changshuju.png



大家注意看類中的四個常數據成員,其中X為static類型,因其靜態化的特殊屬性則需要在類外初始化,即便X為私有類型!

 

 

 

 

2.常對象

 

C++中可以把一個對象聲明為const類型,即常對象。這樣聲明之后,這個對象在整個生命周期中就不可以再被更改,所以在定義的時候要由構造函數進行初始化。

定義格式如下:

類型 const 對象名;

const 類型 對象名;

 

需要注意的是,常對象不可以訪問類中的非常成員函數,只能訪問常成員函數(后面第三部分)。下面我們看例子:

#include<iostream>
using namespace std;
class Clock
{
private:
    const int h;  //修飾h為常類型成員
    const int m;  //修飾m為常類型成員
    int const s;   //和上面兩種用法都可以
    int x;
public:
    Clock(int a,int b,int c):h(a),m(b),s(c)
    {
        x=99;
        cout<<"Constrctor! Called"<<endl;
    }
    int ShowTime()
    {
        cout<<h<<":"<<m<<":"<<s<<endl;
        return 0;
    }
    int GetX() const
    {
        //x=99;
        cout<<x<<endl;
        return 0;
    }
};
 
int main()
{
    const Clock A(12,10,30);
    const Clock B(14,20,50);
    //A = B;
    //A.ShowTime();
    A.GetX();
    return 0;
}

注意看代碼中39,40行的語句,正常編譯將報錯,原因是A為常對象不可以被賦值,以及ShowTime函數為非常成員函數。而41行的代碼則可以執行,效果如下:

changduixiang.png



3常成員函數


類似的,一個類中的成員函數被const修飾后,就變成了常成員函數,常成員函數的定義如下:

成人app返回類型 函數名(形參表列)const;

需要注意:

常成員函數的定義和聲明部分都要包含const;

常成員函數只能調用常成員函數,而不能調用非常成員函數,訪問但不可以更改非常成員變量。

比如如下代碼:

#include<iostream>
using namespace std;
class Clock
{
private:
    const int h;  //修飾h為常類型成員
    const int m;  //修飾m為常類型成員
    int const s;   //和上面兩種用法都可以
    int x;
public:
    Clock(int a,int b,int c):h(a),m(b),s(c)
    {
        x=99;
        cout<<"Constrctor! Called"<<endl;
    }
    int ShowTime()
    {
        cout<<h<<":"<<m<<":"<<s<<endl;
        return 0;
    }
    int GetX() const
    {
        //x=99;
        cout<<x<<endl;
        return 0;
    }
};
 
int main()
{
    const Clock A(12,10,30);
    A.GetX();
    return 0;
}

注意第29、30行代碼,如果使用29行代碼則會編譯報錯,實際運行效果如下:

changfangfa.png


 

成人appC++中常概念的建立,明確了程序中各對象的變與不變的邊界,也加強了C++程序的安全性和可控性。

請大家自行上機實驗。



本文固定URL:http://hnsaiyang.com/course/73

Dotcpp在線編譯      (登錄可減少運行等待時間)