站长之家素材,Wordpress is快递 接口,网页版传奇霸主攻略,网站被黑是怎么回事欢迎来到CILMY23的博客
本篇主题为#xff1a; C/C中新const用法#xff1a;const成员
个人主页#xff1a;CILMY23-CSDN博客
系列专栏#xff1a;Python | C | C语言 | 数据结构与算法 | 贪心算法 | Linux
感谢观看#xff0c;支持的可以给个一键三连#xff0c;点赞…欢迎来到CILMY23的博客
本篇主题为 C/C中新const用法const成员
个人主页CILMY23-CSDN博客
系列专栏Python | C | C语言 | 数据结构与算法 | 贪心算法 | Linux
感谢观看支持的可以给个一键三连点赞关注收藏。 写在前头
在接触C中 const成员前我们可以先复习一下C/C中两种 const 的用法。在指针的入门篇我们写过的知识点链接我们主要分为以下两种情况 const关键字可以限制变量不被修改但是存在可以用指针修改的情况。const如果放在 * 的左边限制的是指针所指向的内容保证指针指向的内容不能通过指针来改变。 但是指针变量本⾝的内容可变。 const如果放在 * 的右边限制的是指针变量本⾝保证了指针变量的内容不能修改但是指针所指向的内容可以通过指针改变。 如果 * 两边都有const那它就会集齐两者使其变成完全不能修改的指针变量。
那现在函数名称后面居然可以写上const了那它又是什么意思呢 目录
一、认识const成员
二、const成员的概念及特点
2.1 const 成员的概念
2.2 const成员函数的四个问题
2.3 权限的放大什么时候存在
三、取地址重载和const取地址重载 一、认识const成员
继上篇日期计算器后现在有一个问题
我们来看这段代码
在main函数中我们用 const 修饰了对象
int main()
{const Date d1(2024, 5, 6);d1.Print();return 0;
}
但是这里却无法访问到Print() 成员函数其实这里涉及权限的放大 那如果我们想让它变成可访问的那就要在成员函数后面增加 const 这个const修饰的是this指针指向的内容。
//Date.cpp
//日期打印
void Date::Print() const
{cout 当前日期 _year / _month / _day endl;
}//Date.h
//日期打印
void Print() const;
我们把这里的Print()就称为const成员函数。
二、const成员的概念及特点
2.1 const 成员的概念
我们将const修饰的“成员函数”称之为const成员函数const修饰类成员函数实际修饰该成员函数 隐含的this指针表明在该成员函数中不能对类的任何成员进行修改。 注意并不是所有的成员函数都需要用const修饰如果只有读取的类成员函数那么可以加如果需要修改类成员变量那就不能加const。
2.2 const成员函数的四个问题 const对象可以调用非const成员函数吗非const对象可以调用const成员函数吗const成员函数内可以调用其它的非const成员函数吗非const成员函数内可以调用其它的const成员函数吗 第一个const对象可以调用非const成员函数吗
答不能因为这里存在权限的放大d1是const对象但它不能调用非const成员函数 第二个 非const对象可以调用const成员函数吗
答可以这样是权限的缩小是允许的。 第三个const成员函数内可以调用其它的非const成员函数吗
答 不行因为这是权限的放大
第四个非const成员函数内可以调用其它的const成员函数吗
答可以这是权限的缩小
2.3 权限的放大什么时候存在 只有指针和引用才存在权限的放大。
例如 三、取地址重载和const取地址重载
类的默认成员函数还剩下取地址重载和const取地址重载这两个默认成员函数一般不用重新定义编译器默认会生成。
例如
class A
{
public:A* operator(){return this;}const A* operator() const{return this;}
};int main()
{A aa1;const A aa2;cout aa1 endl;cout aa2 endl;return 0;
} 结果如下 这两个运算符一般情况下我们不需要重载使用编译器生成的默认取地址的重载即可只有特殊情况才需要重载比如想让别人获取到指定的内容 总结
函数后面有 const 这个const修饰的是this指针指向的内容。权限可以平移或者缩小但不可以放大成员函数如果是一个对成员变量只进行读访问的函数那么建议加 const这样const对象和非const对象都可以使用成员函数如果是一个对成员变量要进行读写访问的函数那么不能加 const否则不能修改成员变量。const不能加在日期计算器中的流插入和流提取中因为它没有this指针。比如想让别人获取到指定的内容我们才需要重载运算符和const 。 感谢各位同伴的支持本期C就讲解到这啦如果你觉得写的不错的话可以给个一键三连点赞关注收藏若有不足欢迎各位在评论区讨论。