Think_in_CPP第十二章 操作符重载(1)
2012-09-14 22:28
225 查看
12.1 重载方式
操作符有两种重载方式:成员函数和全局函数。以Integer类来说明这两种方式。
12.1.1 全局函数方式
12.1.2 成员函数方式
12.2 一元操作符(Unary operators)
12.2.1 全局函数重载方式
12.2.2 成员函数重载方式
12.2.3关于++和--的前置和后置使用
为了区别前置和后置这两种情况,对于后者重载函数,在声明时多加一个int参数,这个参数只是为了和前置版本进行区别,在实际的函数调用中不使用。
操作符有两种重载方式:成员函数和全局函数。以Integer类来说明这两种方式。
12.1.1 全局函数方式
class Integer { 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& operator+(const Integer& a) { cout << "+Integer\n"; return a; // Unary + has no effect }
12.1.2 成员函数方式
class Integer { long i; Integer* This() { return this; } public: Integer(long ll = 0) : i(ll) {} // No side effects takes const& argument: const Integer& operator+() const{ cout << "+Integer\n"; return *this; }; }
12.2 一元操作符(Unary operators)
12.2.1 全局函数重载方式
class Integer { 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; } 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; }
12.2.2 成员函数重载方式
class Byte { unsigned char b; public: Byte(unsigned char bb = 0) : b(bb) {} // No side effects: const member function: const Byte& operator+() const { cout << "+Byte\n"; return *this; } const Byte operator-() const { cout << "-Byte\n"; return Byte(-b); } const Byte operator~() const { cout << "~Byte\n"; return Byte(~b); } Byte operator!() const { cout << "!Byte\n"; return Byte(!b); } Byte* operator&() { cout << "&Byte\n"; return this; } // Side effects: non-const member function: const Byte& operator++() { // Prefix cout << "++Byte\n"; b++; return *this; } const Byte operator++(int) { // Postfix cout << "Byte++\n"; Byte before(b); b++; return before; } const Byte& operator--() { // Prefix cout << "--Byte\n"; --b; return *this; } const Byte operator--(int) { // Postfix cout << "Byte--\n"; Byte before(b); --b; return before; }
12.2.3关于++和--的前置和后置使用
为了区别前置和后置这两种情况,对于后者重载函数,在声明时多加一个int参数,这个参数只是为了和前置版本进行区别,在实际的函数调用中不使用。
相关文章推荐
- Think_in_CPP第十二章 操作符重载(2)
- Think_in_CPP第十二章 操作符重载(4)
- Think_in_CPP第十二章 操作符重载(5)
- Think_in_CPP第十二章 操作符重载(3)
- Think_in_CPP第十二章 操作符重载(6)
- Think_in_CPP第十二章 操作符重载(7)
- think in java第十二章笔记
- Think in C++ error StreamTokenizer.cpp
- think in java第十二章读书笔记
- Think_in_CPP第十三章 动态建立对象(1)
- Leetcode 230. Kth Smallest Element in a BST (Medium) (cpp)
- Leetcode 378. Kth Smallest Element in a Sorted Matrix (Medium) (cpp)
- think in java 读后感(一)
- [C/CPP系列知识] 在C中使用没有声明的函数时将发生什么 What happens when a function is called before its declaration in C
- 《Think in Java》读后感
- think in java - io - RandomAccessFile
- reference type in cpp
- string in cpp
- think in java interview-高级开发人员面试宝典代码示例
- string in cpp 的基本操作