zoukankan      html  css  js  c++  java
  • c++重载(以运算符重载为主)

    重载(OverLoading)是面向对象程序设计多态性的一种体现。所谓重载,是指“同一标识符”在同一作用域的不同场合具有不同的语义,这个标识符可以是函数名或运算符。也就是说,重载可以使多个函数使用同一个函数名,或者同一个运算符代表不同的运算规则。因此,重载包括函数重载运算符重载,使c++使用重载是为了使程序更加简洁。

    函数重载

    ①普通函数重载

    ②构造函数重载

    ③成员函数重载

    具体略......

    运算符重载

    运算符重载规则:

    ①c++中的运算符除了少数几个以外,全部可以重载,具体规则......

    ②c++不允许用户自定义新的运算符,只能对c++已有的运算符进行重载。不能重载的有:. * :: sizeof ?: 这五个。

    ③重载不能改变运算符运算对象(即操作数)的个数。

    ④重载不能改变运算符的优先级和结合性。

    ⑤重载运算符必须和用户所定义的自定义对象一起使用,使其参数......

    ⑥重载运算符的参数不能有默认参数,否则就企图改变运算符参数的个数。

    ⑦对于类对象的运算符一般必须重载,但有两个例外,运算符 = 和 & 不必用户重载。

    例如:......

    ⑧运算符重载是对......

    省略处懒得写了。

    运算符重载形式:

    ①重载为类的成员函数

    语法格式: type operator 运算符(形式参数表)

    参数表中的参数数目与要重载的运算符有关。如果重载弹幕运算符,则参数表是空的,此时当前对象作为运算符的单操作数;如果重载双目运算符,则参数表中有一个操作数,运算时左操作数是当前对象本身的数据,参数表中的操作数作为右操作数。

    例:重载运算符'+',使之能用于两个复数相加:

     1 #include<iostream>
     2 using namespace std;
     3 
     4 class Complex
     5 {
     6     public:
     7         Complex(){real=0;imag=0;}
     8         Complex(double r,double i){real=r;imag=i;}
     9         Complex operator +(Complex& c2);
    10         void display()
    11         {
    12             cout<<'('<<real<<','<<imag<<'i'<<')'<<endl;
    13         }        
    14     private:
    15         double real;
    16         double imag;
    17 };
    18 
    19 int main()
    20 {
    21     Complex c1(3,4),c2(5,-10),c3;
    22     c3=c1+c2;
    23     c1.display();
    24     c2.display();
    25     c3.display(); 
    26     
    27     return 0;
    28 }
    29 
    30 Complex Complex::operator +(Complex& c2)
    31 {
    32     Complex c;
    33     c.real=real+c2.real;
    34     c.imag=imag+c2.imag;
    35     return c;
    36 }

    运行结果:

    ②重载为类的友元函数

    语法格式: friend type operator 运算符(形式参数表)

    其中,friend是声明友元的关键字,type为函数返回类型;operator是定义运算符重载函数的关键字;“运算符”是要重载的运算符符号;参数表给出该运算符所需要的参数。

    例:重载运算符'+',使其实现复数相加,用友元函数实现。

     1 #include<iostream>
     2 using namespace std;
     3 
     4 class Complex
     5 {
     6     public:
     7         Complex(){real=0;imag=0;}
     8         Complex(double r,double i){real=r;imag=i;}
     9         friend Complex operator +(Complex& c1,Complex& c2);
    10         void display()
    11         {
    12             cout<<'('<<real<<','<<imag<<'i'<<')'<<endl;
    13         }        
    14     private:
    15         double real;
    16         double imag;
    17 };
    18 
    19 int main()
    20 {
    21     Complex c1(3,4),c2(5,-10),c3;
    22     c3=c1+c2;
    23     c1.display();
    24     c2.display();
    25     c3.display(); 
    26     
    27     return 0;
    28 }
    29 
    30 Complex operator +(Complex& c1,Complex& c2)
    31 {
    32     Complex c;
    33     c.real=c1.real+c2.real;
    34     c.imag=c1.imag+c2.imag;
    35     return c;
    36     
    37     //or
    38     //return Complex(c1.real+c2.real,c2.imag+c2.imag);
    39 }

    运行结果和上面重载为类的成员函数相同。

    ③其他用算符的重载

    自加(++)自减(--)运算符重载:为了方便起见,重载为类的成员函数。

    赋值(=)(+= 、-=、*=、/=)运算符重载:解决指针悬挂问题。

    下标运算符[]:一般采用成员函数的形式重载,主要应用是读取数组的某个元素。

    函数调用运算符()的重载:......。

    PS:重载运算符[]和()时只能定义为成员函数,而不能用友元函数。

    输入输出流运算符:(输出流运算符:<<和输入流运算符:>>)

    输入输出流运算符是c++类库提供的......(自行了解)

    对“>>”和“<<”重载的函数形式如下:

    istream & operator >> (istream&,自定义类&);

    ostream & operator << (ostream&,自定义类&);

    重载">>"和"<<"的函数作为友元函数,而不能将它们定义为成员函数。

    例子略......

    v、

  • 相关阅读:
    VHDL硬件描述语言(三)——基本数据对象和数据类型
    VHDL硬件描述语言(二)——子程序
    VHDL硬件描述语言(一)——基本结构
    C#类
    C#基本语法
    C#的简单数据类型
    C#与.NET
    ARP
    IPv6
    以太网
  • 原文地址:https://www.cnblogs.com/tenjl-exv/p/7600347.html
Copyright © 2011-2022 走看看