目录
- 一、程序及输出
- 1.1 常函数
- 1.1.1 不能修改对象的成员变量
- 1.1.2 常函数可以被常对象和非常对象调用
- 1.2 常对象
- 1.2.1 对象的成员变量不能被修改
- 1.2.2 只能调用常函数,不能调用非常函数
- 1.2.3 const_cast 调用非常函数
- 1.3 常函数中或常对象修改成员变量
- 二、分析与总结
一、程序及输出
在 C++ 中,常函数和常对象是用来限制对类成员函数和对象的修改操作的概念。
1.1 常函数
常函数: 常函数是指在类的成员函数声明中使用 const 关键字修饰的函数。常函数承诺不会修改对象的成员变量,因此在常函数中不能修改对象的任何非静态成员变量。常函数的语法格式如下:
void functionName() const;
1.1.1 不能修改对象的成员变量
1.1.2 常函数可以被常对象和非常对象调用
#include<iostream>
using namespace std;
class Person
{
public:
Person(int age)
{
this->m_Age = age;
cout << "有参构造函数 "<<this->m_Age << endl;
}
//常函数 : 修饰成员函数中的 this指针,让指针指向的值不可以修改
void showPerson() const
{
cout << "常函数调用" << endl;
}
void func()
{
m_Age = 100;
cout << "func调用" << endl;
}
int m_Age;
};
void test01()
{
//常对象
const Person p1(10);
p1.showPerson();
//非常对象
Person p2(20);
p1.showPerson();
}
int main(){
test01();
system("pause");
return EXIT_SUCCESS;
}
1.2 常对象
1.2.1 对象的成员变量不能被修改
还是上述例子
添加
p1.m_Age = 100;
1.2.2 只能调用常函数,不能调用非常函数
同样例子,添加
p1.func();
1.2.3 const_cast 调用非常函数
其他不变,只修改test01
输出:
在 C++ 中,const_cast 主要用于将指向常对象的指针或引用转换为指向非常对象的指针或引用,以便能够修改被声明为常量的对象
1.3 常函数中或常对象修改成员变量
使用 mutable 关键字
可以允许在常对象或常成员函数中修改被声明为 mutable 的成员变量,从而突破了常对象和常成员函数对成员变量的限制。
#include<iostream>
using namespace std;
class Person
{
public:
Person(int age)
{
this->m_Age = age;
cout << "有参构造函数 " << this->m_Age << endl;
}
//常函数 : 修饰成员函数中的 this指针,让指针指向的值不可以修改
void showPerson() const
{
m_Age = 1000;
cout << "常函数调用" << endl;
}
void func()
{
m_Age = 100;
cout << "func调用" << endl;
}
mutable int m_Age; //常函数中或常对象 有些特殊属性依然想修改,加入关键字 mutable
};
void test01()
{
//常对象
const Person p1(10);
p1.m_Age = 500;
cout << "常对象修改成员变量" << p1.m_Age << endl;
p1.showPerson();
cout << "常函数修改成员变量" << p1.m_Age << endl;
}
int main(){
test01();
system("pause");
return EXIT_SUCCESS;
}
输出:
二、分析与总结
常函数
的特点:
不能修改对象的成员变量。
常函数可以被常对象和非常对象调用。
常对象
的特点:
对象的成员变量不能被修改。
只能调用常函数,不能调用非常函数,除非使用 const_cast 将对象的常属性去除。。
常函数和常对象的使用可以提高程序的安全性,防止意外修改对象的成员变量,从而增强代码的可维护性和可靠性。
常函数中或常对象 有些特殊属性依然想修改,加入关键字 mutable