【问题标题】:Operator functions with pointers to objects带有指向对象的指针的运算符函数
【发布时间】:2013-04-16 18:49:29
【问题描述】:

一个新手问题。假设我们有两个来自随机类的对象,保存在这样的指针中:

   RandomClass *obj1 = new RandomClass;
   RandomClass *obj2 = new RandomClass;

现在,当您从这些对象调用函数时,您可以简单地这样做:

   obj1->randomFunction();

但是如何使用该类中的运算符函数,例如重载的乘法运算符(带有普通对象):

   obj1 * obj2

如果不可能的话,你将如何解决这个问题(编写新函数是不可能的)。对不起,如果这可能是一个愚蠢的问题,但我对它如何与指针算术等一起工作感到有点困惑。

【问题讨论】:

  • @Fredrik Boston Westman 使用解引用运算符 (*)

标签: c++ pointers operator-overloading


【解决方案1】:

你可以像这样取消引用指针:

RandomClass *obj3 = new RandomClass();
*obj3 = (*obj1) * (*obj2);

如果您不再需要相乘的两个对象,请不要忘记适当地清除内存,因为上面的代码会在堆上为 obj3 分配新内存。

【讨论】:

    【解决方案2】:
    1. 如果您的变量是指针,则在声明它们时需要*。我想你也打算有两个不同的变量:

      RandomClass *obj1 = new RandomClass;
      RandomClass *obj2 = new RandomClass;
      
    2. 取消引用指针:

      result = *obj1 * *obj2;
      

    【讨论】:

      【解决方案3】:

      第一段代码不是有效的 C++(看起来更像 Java)。这是有效的 C++:

      RandomClass* obj1 = new RandomClass;
      RandomClass* obj2 = new RandomClass;
      

      要将obj1obj2 指向的对象相乘,请取消引用它们(*obj1*obj2)。代码可能如下所示:

      (*obj1) * (*obj2)
      

      obj1 是一个指针; *obj1 是它所指向的东西。

      【讨论】:

        【解决方案4】:

        我猜你的意思是

        RandomClass *obj1 = new RandomClass();
        RandomClass *obj2 = new RandomClass();
        

        如果你想将两者相乘,你需要遵循指针以获得实际值。

        multRes = (*obj1) * (*obj2);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-10-12
          • 2014-01-02
          • 1970-01-01
          • 1970-01-01
          • 2011-05-09
          • 2012-10-12
          • 1970-01-01
          • 2022-01-04
          相关资源
          最近更新 更多