C++学习5 | const,常成员

 Person p1("ahoj",20);
 const Person* p = &p1;//对象是const
 Person const* p = &p1;//对象是const
 Person *const p = &p1;//指针是const

区别的标记并不是谁离得近,而是他在*号的前面还是后面。

 

int i;

const int ci=3;

int* ip;

ip=&i;

ip=&ci;//ERROR

const int* cip;

cip=&i;

cip=&ci;

常成员

 const成员变量

 · 必须使用初始化参数列表初始化,初始化之后不能修改

 const成员函数

 · 类成员函数形参表之后,函数体之前加上const,这样的函数称为常函数

 · const实际修饰的是this指针

 · 常函数内部无法修改成员变量的值,除非mutable修饰该成员变量

 const对象

 · 这个对象里的成员变量是无法修改的

 · 被const修饰的对象,对象指针或对象引用,统称为常对象

 · 常对象只能调用常函数,非常对象即可调用常函数,也可调用非常函数,优先调用非常版本

 · 成员函数常版本和非常版本可以构成重载

class A
{
    A():m_a(10){}   //常成员变量必须用这种方式赋初始值
    ~A(){}
private:
    const int m_a;
};

class Student
{
public:
    Student(string name,int age):m_name(name),m_age(age){}
    ~Student(){}
    void foo()
    {
        cout << "Student::foo()" << endl;
    }
    void foo()const // const修饰this指针
    {
        cout << "Student::foo()const" << endl;
    }
    void print()const // <=> void print(Student const* const this)
    {
        cout << "Student::print()const" << endl;
        cout << m_name << "," << ++this->m_age << endl;
    }
    // this指向不可修改
    // this指向的对象不可修改
private:
    string m_name;
    mutable int m_age;  //被mutable修饰的常成员变量可以修改
};

int main()
{
    Student stu("ahoj",19);
    stu.print();
    return 0;
}

猜你喜欢

转载自blog.csdn.net/Hanoi_ahoj/article/details/81506096
今日推荐