当前位置: 首页 > article >正文

C++学习Day04之常函数和常对象

目录

  • 一、程序及输出
    • 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


http://www.kler.cn/a/229528.html

相关文章:

  • 02.02_111期_C++_数据内存分布笔记
  • Java接口与抽象类
  • 好“云”来!盘点春节与云计算息息相关的那些事儿
  • JVM 性能调优 - 四种引用(4)
  • 【动态规划】【图论】【C++算法】1928规定时间内到达终点的最小花费
  • 如何在Linux中安装新版的Python软件
  • Linux死机排查方法——内存日志
  • synchronized内部工作原理
  • OpenFeign之@Headers注解
  • PYthon进阶--网页采集器(基于百度搜索的Python3爬虫程序)
  • 【防止重复提交】Redis + AOP + 注解的方式实现分布式锁
  • Nim游戏
  • 使用 IDEA 开发一个简单易用的 SDK
  • DevOps落地笔记-15|混沌工程:通过问题注入提高系统可靠性
  • re:从0开始的CSS学习之路 1. CSS语法规则
  • 数论:修改数列
  • Spring Data Envers 数据审计实战
  • 编码安全风险是什么,如何进行有效的防护
  • Spring boot 集成redis
  • centos | vscode | 更新迭代太快了吧!