c ++运算符重载:在类定义内或类定义之外

时间:2016-02-02 08:45:56

标签: c++

我举了以下例子来说明我的问题:

在第一个例子中,运算符重载是类定义的内幕:

// Example program 1
#include <iostream>
#include <string>


class Abc
{
  public:
    int a_;
    Abc(int a):a_(a) {};
    bool operator <(const Abc &obj)
    {
      return this->a_<obj.a_;   
    }
};
int main()
{
  Abc myAbc(3);
  Abc yourAbc(4);
  bool b = (myAbc<yourAbc);
  if(b)
     std::cout<<"True";
  else
     std::cout<<"False";


  return 0;
}

在第二个示例中,运算符重载超出了类定义:

// Example program 2
#include <iostream>
#include <string>


class Abc
{
  public:
    int a_;
    Abc(int a):a_(a) {};

};

    bool operator <(const Abc &objLeft,const Abc &objRight)
    {
      return objLeft.a_<objRight.a_;   
    }

int main()
{
  Abc myAbc(3);
  Abc yourAbc(4);
  bool b = (myAbc<yourAbc);
  if(b)
     std::cout<<"True";
  else
     std::cout<<"False";


  return 0;
}

在这两个示例中,代码都运行良好。所以我的问题是哪一个更好?或者它们是相同的,这只是一种风格问题。谢谢。

0 个答案:

没有答案