c++ 学习 之 常函数 和 常对象

前言

常函数

成员函数后加 const 我们可以称这个函数为 常函数
常函数内不可以修改成员属性
成员属性声明时加关键字 mutable 后,在常函数中依然可以修改

常对象

常对象
声明对象前加 const 称该对象为常对象
常对象只能调用常函数

正文

常函数

class Person
{
public:
	// this 指针的本质是 指针常量 , 指针的指向是不可以修改的
	void showPerson() const 
	{
		m_A = 10;
	}

	int m_A;
};

看看上面的代码
常函数 是不可以修改里面的值
加了 const 以后 ,这个函数里面
this 指针从 Person * const this 变成了 const Person * const this , 又因为 m_A 等价于 this->m_A , 所以 m_A 不是可以修改的左值
c++ 学习 之 常函数 和 常对象_第1张图片
怎么修改呢
使用 mutable 修饰成员变量,以允许在 const 成员函数内修改它:

class Person
{
public:
    void showPerson() const 
    {
        m_A = 10;  // 在 const 成员函数内部修改成员变量,因为 m_A 被声明为 mutable
    }

    mutable int m_A; // 使用 mutable 关键字
};

常对象

常对象对变量的调用

class Person
{
public:
	// this 指针的本质是 指针常量 , 指针的指向是不可以修改的
	void showPerson() const // 加const 让 this  指向的指针不可以修改
	{
		m_A = 10;
	}

	mutable int m_A;
	int m_B;
};
//常对象
// 声明对象前加 const 称该对象为常对象
// 常对象只能调用常函数

void test()
{
	const Person p; // 在对象前加 const ,变为常对象
	p.m_A = 10;   // 正确的 , 可以修改
	p.m_B = 10;   // 错误的
}

常对象只能调用常函数

class Person
{
public:
	// this 指针的本质是 指针常量 , 指针的指向是不可以修改的
	void showPerson() const // 加const 让 this  指向的指针不可以修改
	{
		m_A = 10;
	}


	void fun()
	{
		m_B = 10;
	}
	mutable int m_A;
	int m_B;
};
//常对象
// 声明对象前加 const 称该对象为常对象
// 常对象只能调用常函数

void test()
{
	const Person p; // 在对象前加 const ,变为常对象
	p.showPerson();  // 正确的
	p.fun();   // 错误的
}

如果上面中 p.fun(); 可以实现的话 ,那么就会修改 m_B 的值,这就违背了常对象不能修改一般的值的规则,所以不能调用

你可能感兴趣的:(c++,c++,学习,java)