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

📄 unary.cpp

📁 ThinkingC++中文版
💻 CPP
字号:
#include "iostream.h"	 //关键字friend不在名字空间std中

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); //单目加,为什么返回const Integer&,+a还是自己a,但+a只能出现在=右边
 
  friend const Integer operator-(const Integer& a) ; //单目负 
//  friend Integer operator-(const Integer& a);  
//-a = b; 编译通过,但运行结果不对!!函数返回的是一个匿名对象,
// friend const Integer operator-(const Integer& a) const;错!!const只能用于成员函数
  
  friend const Integer  operator~(const Integer& a);   //按位反

  friend Integer* operator&(Integer& a);				//逻辑与

  friend int  operator!(const Integer& a);			   //逻辑非
  Integer& operator=(const Integer& a)
  {
	  i = a.i;
	  return *this;
  }
};

// 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;
}




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

}

void main()
{
	Integer a(20);
	Integer b(2);
	const Integer c(30);
	+c;
	+(+c);
    -a;
	-(-a);
  //  -a = b;
	-c;
	//	-a = b;
}

⌨️ 快捷键说明

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