Advertisement
runewalsh

Гроб гроб кладбище перегрузка операторов

Aug 21st, 2012
396
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.43 KB | None | 0 0
  1. struct Blah
  2. {
  3. private:
  4.     float x, y;
  5. public:
  6.     Blah(float newX, float newY): x(newX), y(newY) {}
  7.     const float getX() const { return x; }
  8.     const float getY() const { return y; }
  9.    
  10.     // Первый const — неизменяемость возвращаемого объекта (он будет rvalue, если знаешь такие)
  11.     // это запретит глупости вроде (Blah(1,2) + Blah(3,4)).x = 5
  12.     // (хотя именно такое и без const не сработает, лол, но бывают случаи).
  13.     // Второй — передача по константной ссылке
  14.     // Третий — неизменяемость self-а (первого операнда).
  15.     // Ненаписание этих констов карается.
  16.     // Горжусь C++!
  17.     // UPD: http://duramecho.com/ComputerInformation/WhyHowCppConst.html
  18.     const Blah operator +(const Blah& b) const
  19.     {
  20.         return Blah(x + b.x, y + b.y);
  21.     }
  22.  
  23.     const Blah operator *(const float k) const
  24.     {
  25.         return Blah(x * k, y * k);
  26.     }
  27.    
  28.     // внутри оператора нужен доступ к private-мемберам
  29.     friend const Blah operator *(const float k, const Blah& a);
  30. };
  31.  
  32. const Blah operator *(const float k, const Blah& a)
  33. {
  34.     return Blah(a.x * k, a.y * k);
  35. }
  36.  
  37. int _tmain(int argc, _TCHAR* argv[])
  38. {
  39.     Blah a(3, 4);
  40.     Blah b = 5*a*5 + Blah(1, 2);
  41.     printf("%f %f\n", b.getX(), b.getY());
  42.     return 0;
  43. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement