📄 overloadingunaryoperators.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 + -