【C++札记】const关键字

C++中const关键字无处不在,我这里做下汇总,作为工具文章方便翻阅。

 

一:修饰数据成员

修饰的成员一单定义初始化后不能再进行修改,如:

const int a = 10;

a =20; //重新赋值直接会报错

当修饰类的成员函数时,先来段错误的代码

 

class Student
{
public:
    Student(int i)
    {
        this->age = i; //age是const类型直接复制会报错
    }
private:
     const int age;
};

解决上面的错误有两种方法

 

方法一:

使用参数列表的形式(推荐使用)

 

class Student
{
public:
    Student(int i):age(i)
    {
    }

private:
     const int age;
};

方法二:

定义age时直接赋值

class Student
{
public:
    Student ();

private:
     const int age = 20;
};

 二:修饰成员函数

在声明之后,实现体之前

格式为:

类型 函数名(参数....) const

const修饰的成员函数不能修改类中的成员函数,函数中只能调用const修饰的函数。

 

class Student
{
public:
    Student (int i ):age(i)
    {

    }

    void update () const
    {
        age = age +1;   //const 修饰的成员函数不能修改类中的成员变量
        display();      //const 修饰的成员函数,函数中只能调用const修饰的成员函数
    }

    void display()
    {
        cout << "age:" << endl;
    }
private:
     int age;
};

三:修饰类对象

const修饰的对象,只能调用const修饰的成员函数

class Student
{
public:
    Student (int i ):age(i)
    {

    }

    void update () const
    {
        cout << "this is update" << endl;
    }

    void display()
    {
        cout << "age:" << endl;
    }
private:
     int age;
};

int main()
{
    const Student stu(30);
    stu.update();
    stu.display();    //const修饰的类对象 只能调用const修饰的成员函数
    return 1;
}

成员函数有无const修饰可以构成重载,非const对象调用时优先调用非const修饰的成员函数,如不构成重载也可以调用const修饰成员函数。

class Student
{
public:
    Student (int i ):age(i)
    {

    }

    void display()
    {
        cout << "void display()" << endl;
    }

    void display() const
    {
        cout << "display() const" << endl;
    }
private:
     int age;
};

int main()
{
    Student stu(30);
    stu.display();

    return 1;
}

 输出结果:

 

posted @ 2019-06-21 15:42  蜗牛201  阅读(106)  评论(0编辑  收藏  举报