1. 程式人生 > >C++進階--const和函式(const and functions)

C++進階--const和函式(const and functions)

// const和函式一起使用的情況
class Dog {
   int age;
   string name;
public:
   Dog() { age = 3; name = "dummy"; }
   
   // 引數為const,不能被修改
   void setAge(const int& a) { age = a; }  // 實參是常量時,呼叫此函式
   void setAge(int& a) { age = a; }    // 實參不是常量時,呼叫此函式
   void setAge(const int a) { age = a; } // 值傳遞使用const沒有意義
  
   
   // 返回值為const,不能被修改
   const string& getName() {return name;}
   const int getAge()  //值傳遞const沒有意義
   
   // const成員函式,成員資料不能被修改
   void printDogName() const { cout << name << "const" << endl; }    // 物件是常量時,呼叫此函式
   void printDogName() { cout << getName() << " non-const" << endl; }  // 物件不是常量時,呼叫此函式
};

int main() {

    // 常量和非常量的轉換
    // const_static去除變數的const屬性
    const Dog d2(8);
    d2.printDogName();  // const printDogName()
    const_cast<Dog&>(d2).printDogName() // non-const printDogName()

    // 使用static_cast加上const屬性
    Dog d(9);
    d.printDogName(); // invoke non-const printDogName()
    static_cast<const Dog&>(d).printDogName(); // invoke const printDogName()
   
}