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