C++类与对象之运算符重载详解

yizhihongxing

C++类与对象之运算符重载详解

什么是运算符重载

运算符重载是指在C++中,对运算符进行二次定义,使得运算符能够作用于类对象。

直接使用运算符进行对象的操作,无法实现对象之间的交互和操作。因此,运算符重载应运而生,它可以使得运算符作用于类对象,从而实现对象之间的交互和操作。

为什么要进行运算符重载

运算符重载可以使得程序更加直观、易懂、易用,同时也能够提高程序的可读性和可维护性。

例如,对于两个复数对象进行加法操作。通过运算符重载,我们可以像对两个整型数进行加法操作一样,直接使用“+”运算符进行操作,大大简化了代码。

运算符重载的注意事项

  1. 运算符重载必须是一个函数,并且函数名必须是operator+、operator-等等,其中“+”、“-”为运算符。
  2. 运算符重载必须要有返回值,返回值的类型可以是任意类型,包括Class类型,但返回值类型不能是void。
  3. 运算符重载函数的参数列表有且仅有1个或者2个,不能超过2个。其中,一个参数是运算符左边的操作数,另一个参数是运算符右边的操作数。如果只有一个参数,则为一元运算符,例如-、++等等。
  4. 除了赋值运算符=,其他的运算符重载不改变对象的值,需要通过返回值来实现变化。

运算符重载的语法格式

返回值类型 operator 运算符(参数列表){
   // .. 完成运算符操作的代码 
}

运算符重载的示例1:重载“+”运算符

class Complex {
public:
    Complex() : m_real(0), m_imag(0) {}
    Complex(double r, double i) : m_real(r), m_imag(i) {}
    Complex operator+(Complex &c2) {
        Complex temp;
        temp.m_real = m_real + c2.m_real;
        temp.m_imag = m_imag + c2.m_imag;
        return temp;
    }
private:
    double m_real;  // 实部
    double m_imag;  // 虚部
};

在上面的示例中,我们重载了“+”运算符,使得它能够作用于Complex类型的对象。我们使用两个Complex对象相加,生成一个新的Complex对象,并返回该新对象。这样,我们就可以像对待普通数字一样,对待Complex对象了。

运算符重载的示例2:重载“=”运算符

class MyString {
public:
    MyString(const char *str = nullptr)
    {
        if (nullptr == str) {
            m_data = new char[1];
            *m_data = '\0';
        } else {
            m_data = new char[strlen(str) + 1];
            strcpy(m_data, str);
        }
    }

    MyString(const MyString &other)
    {
        m_data = new char[strlen(other.m_data) + 1];
        strcpy(m_data, other.m_data);
    }

    MyString & operator =(const MyString &other)
    {
        if (this == &other) {
            return *this;
        }

        delete[] m_data;
        m_data = new char[strlen(other.m_data) + 1];
        strcpy(m_data, other.m_data);
        return *this;
    }

    ~MyString()
    {
        delete[] m_data;
    }

private:
    char *m_data;  // 串的实际存储数据
};

在上面的示例中,我们重载了“=”运算符,使得它能够作用于MyString类型的对象。我们使用两个MyString对象相“=”(赋值),生成一个新的MyString对象,并返回该新对象。

运算符重载的总结

  1. 运算符重载的语法格式:返回值类型 operator 运算符(参数列表){}
  2. 运算符重载可以使得程序更加直观、易懂、易用,同时也能够提高程序的可读性和可维护性。
  3. 运算符重载必须要有返回值,返回值的类型可以是任意类型,包括Class类型,但返回值类型不能是void。
  4. 运算符重载的参数列表有且仅有1个或者2个,不能超过2个。其中,一个参数是运算符左边的操作数,另一个参数是运算符右边的操作数。如果只有一个参数,则为一元运算符,例如-、++等等。
  5. 除了赋值运算符=,其他的运算符重载不改变对象的值,需要通过返回值来实现变化。
  6. C++内置的运算符无法重载:sizeof、.*、.、::、?:。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++类与对象之运算符重载详解 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • c语言abort函数实例用法

    下面我来详细讲解一下“c语言abort函数实例用法”的完整攻略。 什么是abort函数 abort()是c语言标准库中的一个函数,它的作用是使程序异常终止。当程序执行到abort()函数时,会立即停止执行,返回一个非零值给操作系统。 使用abort函数的情况 程序遇到无法继续执行的错误 例如文件读取失败、内存分配失败等等。当程序遇到这些错误时,可以使用abo…

    C 2023年5月23日
    00
  • 在SpringBoot中注入RedisTemplate实例异常的解决方案

    在SpringBoot中注入RedisTemplate实例异常的解决方案: 导入 Redis Starter 依赖 在 Spring Boot 项目的 pom.xml 文件中,添加 Redis Starter 依赖。 <dependency> <groupId>org.springframework.boot</groupId&…

    C 2023年5月22日
    00
  • C++ STL 中的数值算法示例讲解

    下面是关于“C++ STL 中的数值算法示例讲解”的完整攻略,包含两个示例说明: C++ STL 中的数值算法示例讲解 数值算法简介 C++ STL 中的数值算法主要用于处理数值型容器的数据。与一般 STL 算法相比,数值算法在处理上具有更高的效率和更高的精度,因此在涉及到数值计算的场景中被广泛使用。 数值算法包含在头文件 numeric 中,其中包括了许多…

    C 2023年5月23日
    00
  • Perl时间处理函数用法介绍

    Perl时间处理函数用法介绍 在Perl编程中,时间的处理是非常常见的操作。Perl提供了丰富的时间处理函数,可以方便开发者对时间进行格式化、计算等操作。在本篇文章中,我们将重点介绍Perl时间处理函数的用法和示例。 时间获取函数 localtime() localtime()函数可以获取当前系统时间。它的返回值是一个数组,包含了当前时间的年、月、日、时、分…

    C 2023年5月22日
    00
  • C++ STL中五个常用算法使用教程及实例讲解

    C++ STL中五个常用算法使用教程及实例讲解 作为C++语言的标准库之一,STL(Standard Template Library)提供了很多有用的容器和算法,让C++开发者更加高效地编写程序。本文将介绍STL中的五个常用算法,包括排序、查找、遍历、求和和去重,并以实例的形式展示具体使用方法。 排序算法 STL中提供了两个常用的排序算法,即sort和st…

    C 2023年5月22日
    00
  • 三星QN900C口碑怎么样? 三星Neo QLED QN90C电视评测

    三星QN900C口碑怎么样? 三星QN900C是三星公司最新推出的一款高端电视,配备了最先进的量子点技术,可以产生更加真实、细致、颜色鲜艳的画面效果。近年来,随着人们对品质生活的追求,三星QN900C在市场上备受瞩目,受到了很多电视爱好者的关注。 在使用者的评论中,三星QN900C获得了很高的评价。用户表示这款电视画面质量极佳,色彩鲜艳、细节丰富、对比度高,…

    C 2023年5月23日
    00
  • C 语言基础教程(我的C之旅开始了)[五]

    下面详细讲解“C语言基础教程(我的C之旅开始了)[五]”的完整攻略。 标题 C 语言基础教程(我的 C 之旅开始了)[五] 概述 本次教程主要涵盖C语言中的结构体和联合体。在学习本篇教程前,需要先掌握C语言中的变量、循环、条件语句、指针等基础知识。 结构体 结构体是 C 语言中自定义的一种数据类型,通过结构体可以将多个不同类型的变量组合成一个整体,方便统一管…

    C 2023年5月23日
    00
  • C++ 超详细梳理继承的概念与使用

    C++ 超详细梳理继承的概念与使用 概念 继承是一种面向对象程序设计中的重要概念,指的是一个类从另一个类获得其成员变量和成员函数的能力。 基类:具有被继承的成员函数和成员变量的类,也称为父类。 派生类:继承了基类属性的类,也称为子类。在派生类中可以定义新的成员函数和成员变量,也可以重载或覆盖基类的成员函数和成员变量。 继承方式分为公有继承、私有继承和保护继承…

    C 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部