c++基础(十二)——const修饰成员函数

一、const修饰成员函数

常函数:
1、成员函数后加const称为这个函数为常函数
2、常函数内不可以修改成员属性

class Person 
{
public:
	void ShowPerson() const
	{
		m_age = 100;
	
	}
	int m_age;
};

此时会报错:
表达式必须是可修改的左值
之所以会发生这样的错误:
在成员函数中都会隐藏一个this指针,而this指针的本质是指针常量(不可以修改指针的指向)。 而const修饰成员函数时,实际上是const Person * const this这一语法。这就造成了指针的指向以及指向的值都不可以修改了。如果在const修饰成员函数时想对部分常函数进行修改要怎么办呢?这就要用到下面的方法

3、成员属性声明时加关键字mutable后,在常函数中依然可以修改

class Person 
{
public:
	void ShowPerson() const
	{
		m_age = 100;
	
	}
	mutable int m_age;
};

这样修改数值时就不会报错了。
常对象:
1、声明对象前加const称该对象为常对象

class Person 
{
public:
	void ShowPerson() const
	{
		m_age = 100;
	}
	mutable int m_age;
	int m_A;
};


void test11()
{
	const Person p;
	p.m_A = 10;
	p.m_age = 100;
}

此时在 p.m_A = 10;这一行会报错。就是因为m_age已经使用了mutable方法。

2、常对象只能调用常函数

class Person 
{
public:
	void ShowPerson() const
	{
		m_age = 100;
	}

	void acd()
	{
	
	}
	mutable int m_age;
	int m_A;
};


void test11()
{
	const Person p;
	p.ShowPerson();
	p.acd();
}

此时在 p.acd();这一行会报错。对象含有与成员勇函数数"Person:acd”不兼容的类型限定符对象类型是: const Person。
因为常对象是不允许修改对象的属性的,而普通的成员对象是可以修改属性的,因此会产生如上问题。

你可能感兴趣的:(c++基础,c++,开发语言,javascript)