c++類的小知識(三)



#include <stdio.h>
#include<iostream>
using namespace std;

class Test
{
    char name[10];
public:
    static int m_sum;
    Test(char *p);
    static int  GetSum();
};

int Test::m_sum=0;
Test::Test(char *p)
{
    strcpy(name,p);
    m_sum++;
}
int Test::GetSum()
{
    return m_sum;
}
int main()
{
    Test s1("test1");
    Test s2("test2");
    Test s3("test3");
    cout<<"sum="<<s1.GetSum()<<endl;
    cout<<"Test::m_sum= "<<Test::m_sum<<endl;

    cout<<"Test::GetSum()="<<Test::GetSum()<<endl;
    return 0;
}

答案爲

sum=3
Test::m_sum= 3
Test::GetSum()3

static類的靜態數據成員,對於同類的多個對象來說,靜態數據成員只佔用一份存儲空間,由所有的對象共享。若某個對象對靜態數據成員做了修改,則其他對象的靜態數據成員也同時被修改。

#include <stdio.h>
#include<iostream>
using namespace std;

class Test
{
    const int m_a;
public:
    Test(int a):m_a(a){};
    int GetA() const;
};


int Test::GetA() const
{
    return m_a;
}
int main()
{
    Test p(2);
    cout<<"m_a="<<p.GetA()<<endl;

    return 0;

}

答案

m_a=2


(1)如果常成員函數在類內說明類外定義,則在函數的實現部分也要帶const關鍵字。

(2)常成員函數不能更新對象的數據成員,也不能調用該類中沒有用const修飾的成員函數,這樣就保證了在常成員函數中絕對不會更新數據成員的值。

(3)如果將一個對象說明爲常對象,則通過該常對象只能調用它的常成員函數,不能調用其他成員函數。

(4)const關鍵字可以被用於參與對重載函數的區分。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章