标签:const对象 const成员函数 函数重载 mutable修饰的成员变量
1? 成员函数可以声明成const函数(声明后加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; }
标签:const对象 const成员函数 函数重载 mutable修饰的成员变量
原文地址:http://blog.csdn.net/love9099/article/details/43086241