两个吃奶一个添下面视频_人妻第一页香蕉网_欧美xxxx少妇_妺妺窝人体色www婷婷

常數(shù)據(jù)成員的使用及初始化

常的概念我們在學C語言時候就有了解,關(guān)鍵字是const,所謂的“常”,或者說被“?!毙揎椀淖兞?,是不可以被改變的,比如用const修飾的一個變量就成了常變量,這個值不可被更改。


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


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


1. 常數(shù)據(jù)成員:

對于常數(shù)據(jù)成員的用法,與我們在C語言的用法一樣,只不過這部分數(shù)據(jù)出現(xiàn)在類里,使用的格式如下:

數(shù)據(jù)類型 const 數(shù)據(jù)成員名;

const 數(shù)據(jù)類型 數(shù)據(jù)成員名;


被const修飾的成員則必須進行初始化,并且不能被更改,而初始化的方式則是在類的構(gòu)造函數(shù)的初始化列表里進行的。


另外,有一個特殊情況,如果成員是static類型,即靜態(tài)常數(shù)據(jù)成員,因為是靜態(tài)的屬性,初始化則需在類外進行初始化。下面我們把剛才講的情況放到代碼里來說明:

#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;
}


運行演示結(jié)果:

C++中常數(shù)據(jù)的使用及初始化


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


2. 常對象:

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

類型 const 對象名;

const 類型 對象名;


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

#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函數(shù)為非常成員函數(shù)。而41行的代碼則可以執(zhí)行,效果如下:

C++中常數(shù)據(jù)的使用及初始化


3. 常成員函數(shù):

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

返回類型 函數(shù)名(形參表列) const;


需要注意:

(1)常成員函數(shù)的定義和聲明部分都要包含const;

(2)常成員函數(shù)只能調(diào)用常成員函數(shù),而不能調(diào)用非常成員函數(shù),訪問但不可以更改非常成員變量。


比如以下代碼:

#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行代碼則會編譯報錯,實際運行效果如下:

C++中常數(shù)據(jù)的使用及初始化


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


請大家自行上機實驗。


點贊(2)

C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習題和答疑,點擊了解:

一點編程也不會寫的:零基礎(chǔ)C語言學練課程

解決困擾你多年的C語言疑難雜癥特性的C語言進階課程

從零到寫出一個爬蟲的Python編程課程

只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程

信息學奧賽或C++選手的 必學C++課程

藍橋杯ACM、信息學奧賽的必學課程:算法競賽課入門課程

手把手講解近五年真題的藍橋杯輔導課程

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