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

lesson2(补充)关于const成员函数

个人主页:Lei宝啊 

愿所有美好如期而遇


前言:

将const 修饰的 成员函数 称之为 const 成员函数 const 修饰类成员函数,实际修饰该成员函数 隐含的 this 指针 ,表明在该成员函数中不能对类的任何成员进行修改。
class Date
{
public:

	Date()
		:_year(2023)
		,_month(10)
		,_day(28)
	{}

	void print() const   //const限定this指针,相当于const Date* this
	{
		cout << _year << "-" << _month << "-" << _day << endl;
	}

private:
	int _year;
	int _month;
	int _day;
};

int main()
{

	Date a;
	a.print();

	return 0;
}
思考下面的几个问题:
1. const对象可以调用非const成员函数吗?
class Date
{
public:

	Date()
		:_year(2023)
		,_month(10)
		,_day(28)
	{}

	void print1() const   //const限定this指针,相当于const Date* this
	{
		cout << _year << "-" << _month << "-" << _day << endl;
	}

	void print2()
	{
		cout << _year << "-" << _month << "-" << _day << endl;
	}

private:
	int _year;
	int _month;
	int _day;
};

int main()
{

	Date a;
	a.print1();

	const Date b;
	b.print1();

	return 0;
}

编译器甚至都没有给出print2这个函数的选项,答案自然是不能,但为什么不能呢? 

我们定义的对象b是const类型,他的成员变量不能做修改,那他的别名的成员变量也不能修改,而我们上述代码中b对象不能调用print2函数是因为print2函数有权限放大,所以不能调用。
2. 非const对象可以调用const成员函数吗?

 

class Date
{
public:

	Date()
		:_year(2023)
		,_month(10)
		,_day(28)
	{}

	void print1() const   //const限定this指针,相当于const Date* this
	{
		cout << _year << "-" << _month << "-" << _day << endl;
	}

	void print2()
	{
		cout << _year << "-" << _month << "-" << _day << endl;
	}

private:
	int _year;
	int _month;
	int _day;
};

int main()
{

	Date a;
	a.print1();

	const Date b;
	b.print1();

	Date c;
	c.print2();

	return 0;
}

 

权限放大不可以,但可以有权限的缩小,c对象成员变量可以修改,也可以不修改,他的别名成员变量不可以修改是合理的。

3. const成员函数内可以调用其它的非const成员函数吗?
4. 非const成员函数内可以调用其它的const成员函数吗?

 这里是权限的缩小,是OK的


 


http://www.kler.cn/news/107840.html

相关文章:

  • IP网络矿用打点紧急广播方案
  • 业界中说的快速原型法是什么
  • 如何使用PHPicker在iOS系统无授权下获取资源
  • 从澎湃OS以小见大,看小米怎么玩转车机
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • Unity3D 多人联机网络游戏开发都存在哪些误区详解
  • 【mediasoup-sfu-cpp】5: SfuDemo:分发ok
  • 自然语言处理 (NLP) 简介
  • SpringBoot使用WebSocket收发实时离线消息
  • 【理论知识:Window Aggregation】flink 窗口聚合功能概述:两种窗口聚合模式的使用例子、功能说明
  • 【Codeforces】 CF582D Number of Binominal Coefficients
  • 浅谈 MySQL 主从复制,优点?原理?
  • Spring Security漏洞防护—HttpFirewall和 HTTPS
  • StripedFly恶意软件框架感染了100万台Windows和Linux主机
  • 0基础学习PyFlink——用户自定义函数之UDTAF
  • Git 拉取远程更新报错
  • Linux音频-基本概念
  • 记录--vue3实现excel文件预览和打印
  • NewStarCTF2023week4-Nmap
  • 【华为OD:C++机试】Day-1
  • 已解决:conda找不到对应版本的cudnn如何解决?
  • K8s 部署 CNI 网络组件+k8s 多master集群部署+负载均衡
  • 猴子吃桃问题--C语言
  • 计算机操作系统重点概念整理-第五章 文件管理【期末复习|考研复习】
  • 不再受害:如何预防和应对.mallab勒索病毒攻击
  • Mac运行Docker报错
  • shell实现部署ftp提供共享yum仓库
  • QT中获取当前项目路径的写法
  • 已有wchar_t *类型的filepath,使用Qt打开该文件
  • CLIP文章精读