const成员函数 以及 取地址及const取地址操作符重载

目录

const成员函数

结论:

取地址及const取地址操作符重载


const成员函数

         将const修饰的“成员函数”称之为const成员函数,const修饰类成员函数,实际修饰该成员函数的(*this),表明在该成员函数中不能对类的任何成员进行修改
        this指针本来就是const, 函数后的const修饰的是对象(*this),表示不能对对象进行修改。
        我们来看看下面的代码
class Date
{
public:
     Date(int year, int month, int day)
     {
         _year = year;
         _month = month;
         _day = day;
     }
     void Print()
     {
         cout << "Print()" << endl;
         cout << "year:" << _year << endl;
         cout << "month:" << _month << endl;
         cout << "day:" << _day << endl << endl;
     }
     void Print() const
     {
         cout << "Print()const" << endl;
         cout << "year:" << _year << endl;
         cout << "month:" << _month << endl;
         cout << "day:" << _day << endl << endl;
     }
private:
     int _year; // 年
     int _month; // 月
     int _day; // 日
};

void Test()
{
     Date d1(2022,1,13);
     d1.Print();
     const Date d2(2022,1,13);
     d2.Print();
}
请思考下面的几个问题:
        1. const对象可以调用非 const 成员函数吗?(不可)
        2. 非 const 对象可以调用 const 成员函数吗?(可以)
        3. const成员函数内可以调用其它的非 const 成员函数吗?(不可)
        4. 非 const 成员函数内可以调用其它的 const 成员函数吗?(可以)

结论:

        只要成员函数中不需要修改成员变量(不需要修改对象),最好都加上const

取地址及const取地址操作符重载

        这两个默认成员函数一般不用重新定义 ,编译器默认会生成。
class Date
{ 
public :
     Date* operator&()
     {
         return this ;
     }

     const Date* operator&()const
     {
         return this ;
     }

private :
     int _year ; // 年
     int _month ; // 月
     int _day ; // 日
};
        这两个运算符一般不需要重载,使用编译器生成的默认取地址的重载即可,只有特殊情况,才需要重载,比如想让别人获取到指定的内容!
例如:

class A
{
public:
	// 我们不实现,编译器会自己实现,我们实现了编译器就不会自己实现了
	// 一般不需要我们自己实现
	// 除非不想让别人取到这个类型对象的真实地址
	A* operator&()
	{
		return nullptr;
	}

	const A* operator&() const
	{
		return (const A*)0xffffffff;
	}
private:
	int _a1 = 1;
	int _a2 = 2;
	int _a3 = 3;
};

int main()
{
	A aa1;
	const A aa2;

	cout << &aa1 << endl;
	cout << &aa2 << endl;

	return 0;
}

这个博客如果对你有帮助,给博主一个免费的点赞就是最大的帮助

欢迎各位点赞,收藏和关注哦

如果有疑问或有不同见解,欢迎在评论区留言哦

后续我会一直分享双一流211西北大学软件(C,数据结构,C++,Linux,MySQL)的学习干货以及重要代码的分享

猜你喜欢

转载自blog.csdn.net/m0_73751295/article/details/138046289