【C++】浅谈取地址及const取地址操作符重载--这两个运算符一般不需要重载,使用编译器生成的默认取地址的重载即可

这两个默认成员函数一般不用重新定义 ,编译器默认会生成。

class Myclass
{
public :
    Date* operator&()
    {
        return this ;
    }
    const Date* operator&()const
    {
        return this ;
    }
private :
    int data_a;
    int data_b;
    int data_c;
};

这两个运算符一般不需要重载,使用编译器生成的默认取地址的重载即可,只有特殊情况,才需要重载,比如想让别人获取到指定的内容!记住结论就好,以下内容仅作参考。


 一、取地址操作符 ‘&’ 的基本用法

1. 获取变量地址

   int a = 10;
   int* p = &a; // p 存储 a 的地址

2. 指针
   在C++中,通过指针可以直接访问对象的内存地址,这使得对内存的直接操作成为可能。

二、const 和取地址操作

在C++中,‘const’ 关键字用于修饰变量,使其成为常量不可修改。在对 ‘const’ 类型的对象取地址时,会有一些特殊的考虑,特别是在使用重载运算符时。

1. 取 const 对象的地址

   const int b = 20;
   const int* ptrB = &b; // ptrB 是指向 b 的常量指针

2. const 引用
   如果你使用 const 引用作为参数传递,可以确保函数内不会修改该引用的值。

   void Print(const int& num) {
       std::cout << num << std::endl;
   }

   int main() {
       int value = 5;
       Print(value); // 传递的是 value 的地址
   }

三、取地址操作符重载

C++ 允许用户重载许多运算符,包括取地址操作符 `&`。重载 `&` 操作符可以让对象行为更自然,但要小心使用,因为这可能会导致代码的难以理解。

1. 重载取地址操作符的基本形式:
 


   class MyClass {
   public:
       MyClass(int val) : value(val) {}

       // 重载取地址操作符
       MyClass* operator&() {
           std::cout << "Custom address operator called" << std::endl;
           return this; // 返回自身的地址
       }

       int value;
   };

   int main() {
       MyClass obj(10);
       MyClass* pObj = &obj; // 调用重载的取地址操作符
   }

在这个示例中,重载的 `&` 操作符返回类的对象的地址,并可以在调用时进行附加的操作,如打印。

2. 重载 const 取地址操作符
   重载 `&` 操作符的同时,也可以重载常量版本,允许通过 `const` 对象获取地址:
 

   class MyConstClass {
   public:
       MyConstClass(int val) : value(val) {}

       const MyConstClass* operator&() const {
           std::cout << "Custom const address operator called" << std::endl;
           return this; // 返回自身的地址
       }

       int value;
   };

   int main() {
       const MyConstClass cObj(20);
       const MyConstClass* pConstObj = &cObj; // 调用重载的 const 取地址操作符
   }

四、注意事项

1. 重载操作符时,容易使代码变得不易维护。只有在真正需要的时候,才应考虑重载操作符。
   
2. 在重载 ‘&’ 时,尤其是涉及对象大于简单的类型时,需注意到可能的数据拷贝。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寒雒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值