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的同名函数

results matching ""

    No results matching ""