UP | HOME

运算符重载

Table of Contents

摘抄自C++ FAQ Lite的运算符重载笔记:

转载说明

本文摘抄自C++ FAQ Lite中文版

版权声明: Part of C++ FAQ Lite, Copyright © 1991-2001, Marshall Cline, cline@parashift.com

[13.5] 什么运算符能/不能被重载?

大多数都可以被重载。C的运算符中只有 . 和 ? :(以及sizeof,技术上可以看作一个运算符)。C++增加了一些自己的运算符,除了::和.*,大多数都可以被重载。

这是一个下标运算符的示例(它返回一个引用)。先没有运算符重载:

class Array {
public:
  int& elem(unsigned i)        { if (i > 99) error(); return data[i]; }
private:
  int data[100];
};

int main()
{
  Array a;
  a.elem(10) = 42;
  a.elem(12) += a.elem(13);
}

现在用运算符重载给出同样的逻辑:

class Array {
public:
  int& operator[] (unsigned i) { if (i > 99) error(); return data[i]; }
private:
  int data[100];
};

int main()
{
  Array a;
  a[10] = 42;
  a[12] += a[13];
} 

Author: Le Cao

Date: 2010-10-12 16:35:57 CST

HTML generated by org-mode TAG=7.01g in emacs 23