C++ - 重载运算符

运算符

  • C++ 预定义表示对数据的运算
    • 只能用于基本的数据类型
  • C++ 提供了数据抽象的手段
    用户自己定义数据类型 -- 类
    • 调用类的成员函数 - >操作它的对象
  • 类的成员函数 -> 操作对象时,很不方便
    • 在数学上,两个复数可以直接进行+/-等运算,在 C++中,是不允许的。

运算符重载

  • 对抽象数据类型也能够直接使用 C++提供的运算符
    • 程序更简洁
    • 代码更容易理解
  • 运算符重载
    • 对已有的运算符赋予多重的含义
    • 使同一运算符作用域不同类型的数据时->不同类型的行为
  • 目的
    • 扩展 C++中提供的运算符的适用范围,以用于类所表示的抽象数据类型
  • 同一个运算符,对不同类型的操作数,所发生的行为不同
    • (5,10i)+(4,8i) = (9,18i)
    • 5 + 4 = 9
  • 运算符重载的 实质函数的重载
  • 在程序编译时候:
    • 把含运算符的表达式 -> 对 运算符函数的调用
    • 把运算符的操作数 ->运算符函数的参数
    • 运算符被多次重载时,根据 实参的类型 决定调用哪个运算符函数
    • 运算符可以被重载成 普通函数
    • 也可以被重载成 类的成员函数
  • 运算符重载为普通函数
    重载为普通函数时,参数个数为运算符目数
class Complex{
    public:
          Complex(double r = 0.0,double i = 0.0){
                real = r;
                imaginary = i;
          }
          double real;
          double imaginary;
};
Complex operator+ (const Complex &a,cost Complex &b)
{
  return Complex(a.real+b.real,a.imaginary+b.imaginary);
}//类名(参数表)就代表一个对象
Complex a(1,2),b(2,3),c;
c = a + b;//相当于什么?
//相当于调用了:
operator+(a,b);
  • 运算符作为成员函数
    重载为成员函数时,参数的个数为运算符目数减一
class Complex{
    public:
          Complex(double r = 0.0,double m = 0.0);
                        real(r),imaginary(m){  }
          Complex operator+ (const Complex &);
          Complex operator- (const Complex &);
    private:
          double real;
          double imaginary;
};
Complex Complex::operator+(const Complex & operand2){
    return Complex(real +operand2.real,imaginary+ operand2.imaginary);
}
Complex Complex::operator-(const Complex & operand2){
    return Complex(real -operand2.real,imaginary- operand2.imaginary);
}
int main(){
    Complex x,y(4.3,8.2),z(3.3,1.1);
    x = y + z;
    x = y - z;
    return 0;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • C++运算符重载-下篇 本章内容:1. 运算符重载的概述2. 重载算术运算符3. 重载按位运算符和二元逻辑运算符4...
    Haley_2013阅读 1,457评论 0 49
  • C++运算符重载-上篇 本章内容:1. 运算符重载的概述2. 重载算术运算符3. 重载按位运算符和二元逻辑运算符4...
    Haley_2013阅读 2,317评论 0 51
  • C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载。 重载声明是指一个与之前已...
    资深小夏阅读 490评论 0 0
  • 1.constructor构造函数 构造函数名称=类名。构造函数的作用:初始化对象的数据成员。 1.1 构造函数的...
    hui1429阅读 457评论 0 0
  • 杨明说自己手下的那杆笔造了太多孽,以后不写了,为谁也不写了。 杨明给我打电话让我陪他去取披萨,说是他女友送给我们吃...
    深蓝不会写小说阅读 1,049评论 22 14