⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 overloadingunaryoperators.cpp

📁 ThinkingC++中文版
💻 CPP
字号:
//: C12:OverloadingUnaryOperators.cpp
#include "iostream.h"	

#include "require.h"

using namespace std;

// Non-member functions:
class Integer {
private:
  long i;
  Integer* This() 	 //私有的成员函数
  { 
	  return this; 
  }
public:
  Integer(long ll = 0) : i(ll) {}
  // No side effects takes const& argument:
  friend const Integer& operator+(const Integer& a);
  friend const Integer  operator-(const Integer& a);
  friend const Integer  operator~(const Integer& a);
  friend Integer* operator&(Integer& a);
  friend int  operator!(const Integer& a);
  // Side effects have non-const& argument:
  // Prefix:
  friend const Integer&	operator++(Integer& a);
  // Postfix:
  friend const Integer operator++(Integer& a, int);
  // Prefix:
  friend const Integer&	operator--(Integer& a);
  // Postfix:
  friend const Integer operator--(Integer& a, int);
};

// Global operators:
const Integer& operator+(const Integer& a) 
{
  cout << "+Integer\n";
  return a; // Unary + has no effect
}

const Integer operator-(const Integer& a) 
{
  cout << "-Integer\n";
  return Integer(-a.i);
}

const Integer operator~(const Integer& a) 
{
  cout << "~Integer\n";
  return Integer(~a.i);
}
Integer* operator&(Integer& a)
{
  cout << "&Integer\n";
  return a.This(); // &a is recursive!
}
int operator!(const Integer& a) 
{
  cout << "!Integer\n";
  return !a.i;
}
// Prefix; return incremented value
const Integer& operator++(Integer& a) 
{
  cout << "++Integer\n";
  a.i++;
  return a;
}
// Postfix; return the value before increment:
const Integer operator++(Integer& a, int) 
{
  cout << "Integer++\n";
  Integer before(a.i);
  a.i++;
  return before;
}
// Prefix; return decremented value
const Integer& operator--(Integer& a) 
{
  cout << "--Integer\n";
  a.i--;
  return a;
}
// Postfix; return the value before decrement:
const Integer operator--(Integer& a, int) 
{
  cout << "Integer--\n";
  Integer before(a.i);
  a.i--;
  return before;
}

// Show that the overloaded operators work:
void f(Integer a) {
  +a; //call function: operator+(a)
  -a;
  ~a;
  Integer* ip = &a;
  !a;
  ++a;
  a++;
  --a;
  a--;
}


void main() {
 Integer a,b,c;
 f(a);

} ///:~

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -