8

我们有以下课程。我需要解释代码的某些部分。

class CPoint3D
    {
    public:
      double x, y, z;

      CPoint3D (double dX = 0.0, double dY = 0.0, double dZ = 0.0) 
              : x(dX), y(dY), z(dZ) {}
      //what means these lines of    code?
      CPoint3D operator + (const CPoint3D& point) const;
      CPoint3D operator - (const CPoint3D& point) const;
      CPoint3D operator * (double dFactor) const;
      CPoint3D operator / (double dFactor) const;
};

我猜使用

CPoint3D operator + (const CPoint3D& point) const;

函数我可以轻松地添加/减去/乘/除类的实例CPoint3D

有人可以用例子来解释吗?谢谢!

4

2 回答 2

12

网络上有数以百万计的示例和/或文章(包括这个),所以我不会在这里重复它们。

可以说,当您将两个CPoint3D对象与相加时obj1 + obj2,被调用的函数是operator+针对该类的,一个对象是this,另一个是point

您的代码负责创建另一个包含这两个对象的对象,然后返回它。

减法同上。乘法运算符略有不同,因为它们使用双精度作为另一个参数 - 大概虽然为加法运算符添加/减去类的各个成员是有意义的,但这对乘法运算符没有那么有用。

于 2013-08-16T08:44:47.763 回答
4

您可能会阅读一些有关C++ 运算符重载的文献。也在这里,或在这里,或只是谷歌它:)

这是来自cplusplus.com的一个简单示例:

// vectors: overloading operators example
#include <iostream>
using namespace std;

class CVector {
  public:
    int x,y;
    CVector () {};
    CVector (int,int);
    CVector operator + (CVector);
};

CVector::CVector (int a, int b) {
  x = a;
  y = b;
}

CVector CVector::operator+ (CVector param) {
  CVector temp;
  temp.x = x + param.x;
  temp.y = y + param.y;
  return (temp);
}

int main () {
  CVector a (3,1);
  CVector b (1,2);
  CVector c;
  c = a + b;
  cout << c.x << "," << c.y;
  return 0;
}
于 2013-08-16T08:48:02.147 回答