程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++中const對象和const成員函數

C++中const對象和const成員函數

編輯:關於C++

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.
//

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


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved