#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關鍵字可以被用於參與對重載函數的區分。