码迷,mamicode.com
首页 > 编程语言 > 详细

C++中const对象和const成员函数

时间:2015-01-24 17:25:56      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:const对象   const成员函数   函数重载   mutable修饰的成员变量   

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 <iostream>
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;
}


C++中const对象和const成员函数

标签:const对象   const成员函数   函数重载   mutable修饰的成员变量   

原文地址:http://blog.csdn.net/love9099/article/details/43086241

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!