类和对象(8)--常函数和常对象

1 常函数

1.1 this指针的本质

假设有一个Person类。
那么这个this指针的本质就是:

Person * const this;
// 此时,指针的指向不可以修改,而指针指向的值是可以修改的。

1.2 常函数的原理

添加关键字,修饰成员函数中this指针,让this指针指向的值也不可以修改。(即不可以修改类中的成员变量的值)

1.3 常函数的语法

	返回类型 成员函数名() const {}
	// const目的是为了修饰成员函数中的this指针,让指针指向的值不可以修改


2 常对象

2.1 常对象的语法

	// 类名前加const关键字修饰
	const 类名 类对象;

2.2 使用常对象的注意事项

  1. 常对象必须初始化。即,如果类中存在成员变量并且使用默认构造函数对其初始化,必须手动添加默认构造函数,如果使用拷贝构造函数则不需要必须手动添加。
  2. 常对象只能调用常函数

3 mutable 关键字 – 在常函数或者常对象中可以修改成员变量

有些成员变量比较特殊,依然在常函数或者常对象中可以修改,需要加入关键字 mutable

#include <iostream>
using namespace std;

class Person
{
public:
    Person(){}  // 常函数必须初始化,即,如果使用默认构造函数对其初始化,必须手动添加默认构造函数
    // 常函数
    void setAge() const
    {   
        //m_Height = 170;   // 没有添加mutable关键字的成员变量在常函数中不可以修改
        m_Age = 18; 
        cout << m_Age << endl;
    }   

    void showAge()
    {   
    }   


    mutable int m_Age;  // 添加关键字mutable,使其在常函数和常对象中可以修改
    double m_Height;
};

int main()
{
    Person p;

    p.setAge();
   
    const Person p1;    // 常对象
    p1.m_Age = 20;      // 添加关键字mutable,使其在常函数和常对象中可以修改

    p1.setAge();
    //p1.showAge();     // 常对象只能调用常函数


    return 0;
}


4 const和static

对于成员函数 ,不可以用static 和 const同时修饰 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值