运算符重载

一、多态的概述

1.多态的类型

 重载多态,包含多态,强制多态和参数多态

2.多态的实现

实现的角度:(1)编译时的多态 

                                  在编译中的过程中确定了同名操作的具体操作对象

                        (2)运行时的多态

                                    在程序的运行过程中才动态地确定操作所针对的具体对象(其过程为绑定

绑定:计算机程序自身彼此关联的过程,就是把一个标识符名和一个存储地址联系在一起的过程

            (用UML的术语解释:把一条消息和一个对象的方法相结合的过程)

 绑定的方法:1.静态绑定   

                              绑定工作在编译连接阶段完成的情况

                        2.动态绑定

                             绑定工作在程序运行阶段完成的情况

二、运算符重载

1、运算符重载的定义:对已有的运算赋予多重含义,使同一个运算符作用于不同类型的数据时导致不同的行为
                    解决的问题:可以是对象与对象之间进行运算,或其他与运算符有关的计算


2、运算符重载的规则

(1)只重载c++中大部分已经有的运算符

(2)重载后运算符的优先级和结合性都不会发生改变

(3)运算符重载是针对新类型数据的实际需要,对原有运算符进行适当的改造。

类属性关系运算符“.”,成员指针运算符“.*”,作用域分辨符“::”,三目运算符“?:” 这四种操作符不能重载

运算符的重载形式有两种 :非静态成员函数和非成员函数函数。

语法:

返回类型  operator 运算符(形参表)

{            函数体     }

operator 为关键字



三、运算符重载是成员函数或非成员函数

运算符为成员运算符
#include<iostream>
using namespace std;
class A{
      int x;             //c++中默认x为私有类型
public:
   A(int i):x(i){}             //构造函数
   void print();              //输出函数
   A  &operator++();      //重载前置运算符++             如;有一个对象a  ,进行++a(3);
   A  operator++(int);        //重载后置运算符++         如;有一个对象a  ,进行a(3)++;
};
A &A::operator++()         
{   x++;
return *this;
}
A A::operator++(int)
{    A b=*this;       //创建一个临时的A类的对象b  ,用来存放初始的对象   如: a(3)++;将a(3)未自增时的内容赋给对象b,此时的 *this为a(3)
     ++(*this);       //经过此语句后,*this  为  a(3)++;  通俗的将就是 a(3)自增后的内容就是  *this的值
      return b;       //这返回的是b,也就是a(3)未自增是的值
}
void A::print(){   cout<<"此刻的对象数据成员x的值为"<<x<<endl;   }
int main()
{
A a(3);
a.print();
(a++).print();
a.print();
(++a).print();
a.print();
return 0;
}

运算符为非成员函数
利用友元函数来重载
如:friend A operator+(A &a1,A &a2);
       friend A operator- (A &a1,A &a2);




       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值