网站建设的推广渠道,计算网站制作教程,学做彩票网站,免费虚拟主机网站源码个人主页 #xff1a; zxctscl 如有转载请先通知 文章目录 1. 前言2. const成员3. 取地址及const取地址操作符重载 1. 前言
在之前已经已经分享过了关于 【C】类和对象之常引用与运算符重载#xff0c;这次分享的有关const的内容#xff0c;话不多说#xff0c;正文开始。… 个人主页 zxctscl 如有转载请先通知 文章目录 1. 前言2. const成员3. 取地址及const取地址操作符重载 1. 前言
在之前已经已经分享过了关于 【C】类和对象之常引用与运算符重载这次分享的有关const的内容话不多说正文开始。
2. const成员
将const修饰的“成员函数”称之为const成员函数const修饰类成员函数实际修饰该成员函数隐含的this指针表明在该成员函数中不能对类的任何成员进行修改。 看看下面的代码
class Date
{
public:Date(int year, int month, int day){_year year;_month month;_day day;}void Print(){cout _year / _month / _day endl;}private:int _year; int _month; int _day;
};
int main()
{const Date d1(2024, 1, 1);d1.Print();return 0;
}在这里为什么不能调用printf呢 为了解决这个问题在函数后面加const 这个是权限的平移。
#include iostream
using namespace std;class Date
{
public:Date(int year, int month, int day){_year year;_month month;_day day;}void Print()const{cout _year / _month / _day endl;}private:int _year;int _month;int _day;
};int main()
{const Date d1(2024, 1, 31);d1.Print();Date d2(2024, 3, 31);d2.Print();return 0;
}如果是像d2呢 也可以用printf这里是权限的缩小。 并不是所有的函数都能加上const。 总之 成员函数如果是一个对成员变量只进行读访问的函数建议加const这样const对象和非const对象都能使用。 成员函数如果是一个对成员变量进行读写访问的函数不加const否则不能修改成员变量。 下面代码是权限放大吗 不是这里是拷贝j的改变不影响i也不存在所谓的权限方法。
这个才是权限的放大r的改变影响i。 p2的改变会影响p1也就是i。
权限的放大指针和引用赋值才存在权限放大。
来看看下面的几个问题 const对象可以调用非const成员函数吗 不行权限放大了 非const对象可以调用const成员函数吗 可以这里权限缩小 const成员函数内可以调用其它的非const成员函数吗 不行权限放大了 非const成员函数内可以调用其它的const成员函数吗 可以这里是权限的缩小
3. 取地址及const取地址操作符重载 如果不是默认成员函数那么重载才能使用。 如果每次使用都要重载那么编译器就直接默认生成。
这两个默认成员函数一般不用重新定义 编译器默认会生成不需要自己写日常已经够用了。
class Date
{
public:Date* operator(){return this;}const Date* operator()const{return this;}
private:int _year; // 年int _month; // 月int _day; // 日
};这两个运算符一般不需要重载使用编译器生成的默认取地址的重载即可。
只有特殊情况才需要重载比如想让别人获取到指定的内容 像这样普通对象能拿地址const对象不能拿地址。 有问题请指出大家一起进步