知识总结

重载是有规则的,首先,“重载运算符”是“重载”,而不是“定义”,所以只能改变一个C++中已有的运算符,而不是定义一个本来没有的运算符。

  1. C++只能重载C++中已有的运算符.如:
      • / % ^ & | ~

! = < > += -= *= /= %

^= &= |= << >> >>= <<= == !=

<= >= && || ++ – ->* ‘ ->

[] () new delete new[] delete[]

不能重载的操作符是类属关系运算符 如:

. :: .* ?: sizeof

  1. 重载运算符后的优先级和结合性都不会改变。
    3.重载的运算符要与该运算本身的含义一致,不能导致混乱。
    注:重载运算符时,其参数个数比实际上参与运算的个数少一个。因为该对象自身也将参与运算。
    重载类型 operator/这是一个重载运算符的关键字/
    重载运算符号
    {
    要执行的内容 return X;//返回一个值(void则不用返回)
    }
    关系运算符重载
    这里要重载的十分多:>,>=,<,<=,==…那么是不是要一一写呢?答案是否定的,实际上你只需要写出一个<重载,然后其他运算符都可以用逻辑运算和已经重载的<表示出。

一.用成员函数或友元函数重载运算符
注:运算符函数也可以重载为成员函数或友元函数

  1. 一元运算符
    Object op 或 op Object
    重载为成员函数,解释为:
    Object . operator op ()
    操作数由对象Object通过this指针隐含传递
    重载为友元函数,解释为:
    operator op (Object)
    操作数由参数表的参数Object提供

  2. 二元运算符
    ObjectL op ObjectR
    重载为成员函数,解释为:
    ObjectL . operator op ( ObjectR )
    左操作数由ObjectL通过this指针传递,右操作数由参数ObjectR传递
    重载为友元函数,解释为:
    operator op ( ObjectL, ObjectR )

    左右操作数都由参数传递
    3.用成员函数重载运算符
    成员运算符函数的原型在类的内部声明格式如下:
    class X
    {
    返回类型 operator运算符(形参表);
    }

在类外定义成员运算符函数的格式如下:
返回类型 X::operator运算符(形参表)
{
函数体
}
(1)双目运算符重载为成员函数

对双目运算符而言,成员运算符函数的形参表中仅有一个参数,它作为运算符的右操作数,此时当前对象作为运算符的左操作数,它是通过this指针隐含地传递给函数的。

(2)单目运算符重载为成员函数

对单目运算符而言,成员运算符函数的参数表中没有参数,此时当前对象作为运算符的一个操作数。
模拟秒表的Time类

class Time
{

public:

Time( ){minute=0;sec=0;}

Time(int m,int s):minute(m),sec(s){ }

Time operator++( ); //声明前置自增运算符“++”重载函数

Time operator++(int); //声明后置自增运算符“++”重载函数

private:

int minute;

int sec;

};

  1. 用友元函数重载

一般而言,采用成员函数重载单目运算符时,以下两种方法是等价的:

@aa;                // 隐式调用

aa.operator@();    // 显式调用

成员运算符函数operator @所需的一个操作数由对象aa通过this指针隐含地传递。因此,在它的参数表中没有参数。
注:c++中不能用友元函数重载的运算符有=    ()    []    ->

典型

设 A Aobject ;

运算符 ++和 - - 有两种方式:

前置方式: ++Aobject --Aobject

成员函数 重载 A :: A operator++ () ;

解释为: Aobject . operator ++( ) ;

友元函数 重载 friend A operator++ (A &) ;

解释为: operator ++( Aobject ) ;

后置方式: Aobject ++ Aobject –

成员函数 重载 A :: A operator++ (int) ;

解释为: Aobject . operator ++( 0 ) ;

友元函数  重载:	friend A operator++ (A &, int) ; 

解释为: operator++(Aobject, 0)

二.重载赋值运算符

(1)赋值运算符重载用于对象数据的复制

(2)operator= 必须重载为成员函数

(3)重载函数原型为:

类名 & 类名 :: operator= ( 类名 ) ;
函数重载:返回值类型可以相同可以不同,但形参列表一定不同;
继承方式
私有继承private:父类的公有成员和保护成员作为子类的的私有成员,且不能被子类的派生类访问;
公有继承public:父类的公有成员和保护成员作为子类的成员时,仍保持原有状态,父类私有成员仍为私有;
保护继承protected:父类的公有成员和保护成员成为子类的保护成员,且只能被他的派生类成员函数或友元访问,父类私有成员仍为私有
单继承定义:从一个基类中派生的继承称为单继承。也可以说,单继承的派生类只有一个基类。在单继承中,一个基类可以生成多个派生类,但是每个派生类只有一个基类。
单继承派生类的定义格式:
class <派生类名>: <继承方式> <基类名>
{
<派生类新成员的定义>
};
其中<派生类名>是从一个<基类名>中派生出来的类名,并且该派生类是按指定的<继承方式>

 在 保护继承下,派生类的成员函数可以访问基类中的公有成员和保护成员,

                            派生类的对象都不能访问基类的任何成员。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值