1? 成員函數可以聲明成const函數(聲明後加const)
2? 對於const對象,只能調用const成員函數 3? Const函數和非const函數可以形成重載 4? 對於非const對象的函數調用優先選擇非const成員函數 5? 對於類中的mutable數據成員,可以被const成員函數修改
// // main.cpp // Const // // Created by 06 on 15/1/24. // Copyright (c) 2015年 黃永銳. All rights reserved. // #includeusing namespace std; //員工類 class Employee{ string name; int age; mutable int x;//注意這個關鍵字的作用哦 public: Employee(string name,int age):name(name),age(age){ // name = name;//這樣區分不開 } // void setName(string name){ this->name = name; } string getName() const{ return name; } void show(){ cout << name << "今年" << age << "歲了" << endl; // name = "2345"; } #pragma 注意 const加在前面,修飾的是返回值 const void show1(){ cout << name << "今年" << age << "歲了" << endl; // name = "2345"; } #pragma 我們想修飾一個函數讓它具有常量性 應該把const加在參數後面 void show2() const{ cout << name << "今年" << age << "歲了" << endl; // this->name = "1234567";//const函數中不能修改普通成員變量 x = 100;//被mutable修飾的變量可以在const函數中修改 } #pragma 函數重載: const函數 與 非 const函數可以形成函數重載的關系 }; //主函數 int main(int argc, const char * argv[]) { //創建對象 Employee em("張三",18); em.show(); em.setName("王五"); //這裡是修改了成員變量 em.show(); em.setName("dfghj"); em.getName(); #pragma 如果我這個對象是一個const類型的對象 會如何?em2能夠調用show方法嗎? const Employee em2("李斯",21); // em2.show(); //不能調用。 為什麼? 因為 /* const類型的對象,說明這個對象裡面的所有成員變量都不允許修改 但是在調用show方法的時候,show方法裡面現在的確是沒有修改,但是可以修改。那麼我就不放心了,你說你不修改,可是你可以修改 在em2調用show方法的時候,把em2隱式傳進去,然後再show方法裡面就可以通過this->拿到對象獲取變量 */ #pragma 怎樣才可以讓它去調用? 只要保證在這個函數裡真的不去修改任何變量 //怎麼去保證? 我把這個函數修飾成const em2.show2();//const對象只能調用const類型的成員函數 em.show2();//普通的對象也能調用 #pragma 所以說在一些函數裡面沒有修改成員變量的函數 還是加上const好. getter方法可以加,setter方法不能加 em2.getName(); //em2.setName("dfghj");//不能調用 return 0; }