const修饰符
const可以修饰成员变量,成员方法,还可以修饰类
1.const修饰的成员变量只能在初始化列表中完成初始化,其他地方都会报错
#include <iostream>
//秒表类
class Stopwatch
{
public:
Stopwatch()
:batteryCount(0)
{
std::cout << "batteryCount:" << batteryCount<<std::endl;
};
~Stopwatch(){};
public:
void start(){}; //开始
void stop(){}; //停止
void reset(){}; //复位
public:
const int batteryCount;//电池数
};
int main(int argc, char const *argv[])
{
Stopwatch watch; //batteryCount:0
return 0;
}
#include <iostream>
//女孩类
class Girl
{
public:
Girl(std::string s)
:sex("女"),name(s)
{
};
~Girl(){};
public:
void printInfo(){
std::cout<< "name:" << name<<" sex:"<<sex<<std::endl;
}
private:
std::string name;
const std::string sex;
};
int main(int argc, char const *argv[])
{
Girl g("小莉");
g.printInfo();
return 0;
}
2.const修饰成员函数
- const修饰成员函数,要放到函数的后面
- const修饰成员函数,可以访问任意的成员变量,但是不允许修改成员数据(否则就可以借刀杀人了)
- const修饰成员函数,只能访问const成员函数
一句话总结:const修饰成员函数,const关键字需放到函数名称后面,函数体可以访问任何成员数据,但是无人和修改权限,方法只能调用带const修饰的方法
#include <iostream>
class Gril
{
public:
Gril(){};
~Gril(){};
public:
void printName()
{
std::cout<< "printName():"<< name <<std::endl;
}
void printName() const
{
std::cout<< "printName() const:"<< name <<std::endl;
std::string temp = name;
getSex();
}
void rename(std::string s){
name = s;
}
std::string getSex() const
{
return sex;
}
private:
std::string name;
const std::string sex;
};
int main(int argc, char const *argv[])
{
return 0;
}
3.const修饰类
#include <iostream>
class Girl
{
public:
Girl(std::string name)
:name(name),sex("女")
{};
~Girl(){};
public:
void printName()
{
std::cout<< "printName():"<< name <<std::endl;
}
void printName() const
{
std::cout<< "printName() const:"<< name <<std::endl;
std::string temp = name;
}
void rename(std::string s){
name = s;
}
std::string getSex() const
{
return sex;
}
private:
std::string name;
const std::string sex;
};
int main(int argc, char const *argv[])
{
Girl girl("小美");
girl.printName();
const Girl girl2("小严");
girl2.printName();
const Girl* girl3 = new Girl("小花");
girl3->printName();
delete girl3;
const Girl& girl4 = girl;
girl.printName();
return 0;
}
此例中,有2个printName()
,实例会优先调用不带const的同名函数