C++中的四个默认成员函数与运算符重载详解

yizhihongxing

C++中的四个默认成员函数与运算符重载详解

在C++中,每个类都具有四个默认成员函数,它们是默认构造函数、拷贝构造函数、移动构造函数和析构函数。这四个函数可以在类中重载或者自动创建,对于理解类的基本特性非常重要。

默认构造函数

默认构造函数是没有任何参数的构造函数,如果类没有显式定义构造函数,则编译器会自动创建一个默认构造函数。默认构造函数的作用是用来将类的数据成员初始化为默认值,例如:

class Person {
public:
    Person(): age(0), height(0.0), name("") {}  // 默认构造函数
private:
    int age;
    double height;
    string name;
};

这个类中的默认构造函数会将age设为0,height设为0.0,name设为空字符串,这是通过在函数体中进行初始化实现的。

拷贝构造函数

拷贝构造函数是用来完成对象的拷贝的,拷贝构造函数的原型为:

ClassName (const ClassName &obj)

其中,obj是要拷贝的对象。以下是一个简单的示例:

class Person {
public:
    Person(const Person &p) {  // 拷贝构造函数
        age = p.age;
        height = p.height;
        name = p.name;
    }
private:
    int age;
    double height;
    string name;
};

Person p1;
Person p2(p1);  // 使用拷贝构造函数将p1拷贝给p2

移动构造函数

移动构造函数是C++11添加的一个新特性,它将一个右值引用作为其参数,可以将右值中的数据成员直接“移动”到新对象中,而不是复制它们。这样可以更高效地将资源进行转移,例如:

class MyString {
public:
    // 移动构造函数
    MyString(MyString &&s) {
        data = s.data;
        len = s.len;
        s.data = nullptr;
        s.len = 0;
    }

    // 重载赋值运算符
    MyString &operator=(MyString &&s) {
        data = s.data;
        len = s.len;
        s.data = nullptr;
        s.len = 0;
        return *this;
    }

private:
    char *data;
    int len;
};

MyString s1("hello");
MyString s2(std::move(s1)); // 将s1中的数据“移动”给s2

在这个示例中,使用了std::move函数将s1转换为右值引用,然后使用移动构造函数将s1中的数据移动到s2中。

析构函数

析构函数是用来清理对象占用的资源,一般成员函数名为~ClassName()。例如:

class Person {
public:
    ~Person() {
        // 清理占用的资源
    }
private:
    int age;
    double height;
    string name;
};

Person p;  // 创建一个对象
// p的生命周期结束时,析构函数将被自动调用

在这个示例中,当p生命周期结束时,析构函数将被自动调用,清理占用的资源。

运算符重载

运算符重载是C++的一个强大的特性,它可以为类定义自定义的运算符,例如:

class Complex {
public:
    Complex(double r = 0.0, double i = 0.0): real(r), imag(i) {}
    // 重载加法运算符
    Complex operator+(const Complex &c) {
        return Complex(real + c.real, imag + c.imag);
    }
private:
    double real;
    double imag;
};

Complex c1(1.0, 2.0);
Complex c2(2.0, 3.0);
Complex c3 = c1 + c2; // 通过重载的加法运算符计算c1和c2的和

在这个示例中,通过重载加法运算符,可以使得Complex类的对象可以直接进行加法运算。

总结

本文介绍了C++中四个默认成员函数——默认构造函数、拷贝构造函数、移动构造函数和析构函数,以及运算符重载的概念和示例。这些特性对于C++程序员来说至关重要,希望本文能够帮助你更好地理解它们。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++中的四个默认成员函数与运算符重载详解 - Python技术站

(0)
上一篇 2023年6月26日
下一篇 2023年6月26日

相关文章

  • 网络通信-基本概念:网络、IP地址、端口、socket

    网络通信-基本概念:网络、IP地址、端口、socket 网络 网络是指两个或两个以上计算机设备间互相连接的通讯系统。网络的发展改变了人们之间的交流方式,它不仅能够将人们连接在一起,而且还能实现大规模信息交流。 IP地址 IP地址是指分配给网络上连接设备的唯一地址,用于在互联网中定位和寻找设备。它是一串用于标识设备的数字,分为IPv4和IPv6两种格式。IPv…

    其他 2023年3月28日
    00
  • 合金装备5幻痛开发小组怎么升级_开发小组升级方法推荐

    合金装备5幻痛开发小组升级攻略 1. 理解开发小组升级系统 在《合金装备5幻痛》中,开发小组升级系统是一个重要的机制,它允许玩家通过提升开发小组的等级来解锁更多的武器、装备和设施。下面是一些升级开发小组的方法和示例说明。 2. 完成任务和侧任务 完成主线任务和侧任务是升级开发小组的主要途径之一。通过完成任务,你可以获得资源和GMP(游戏中的货币),这些资源可…

    other 2023年7月27日
    00
  • 华为p30pro开发人员选项如何关闭?华为p30pro关闭开发人员选项的方法

    华为P30 Pro是一款非常出色的手机,具有丰富的功能和优秀的性能。在使用过程中,开发人员选项可能不是每个用户都需要的,因此关闭开发人员选项可以让界面更加简洁和易于使用。 下面是关闭华为P30 Pro开发人员选项的完整攻略,包括具体步骤和示例说明。 第一步:打开设置应用 首先打开手机的主屏幕,点击“设置”应用。如果您无法在主屏幕上找到“设置”,可以从应用列表…

    other 2023年6月28日
    00
  • ubuntu修改硬盘的挂载路径

    Ubuntu修改硬盘的挂载路径 在Ubuntu系统中,我们可以通过修改硬盘的挂载路径来更灵活地管理我们的存储资源。本文将介绍如何在Ubuntu上修改硬盘的挂载路径。 步骤一:查看硬盘信息 首先,我们需要查看系统中已经挂载的硬盘信息,以便确定需要修改挂载路径的硬盘。在命令行界面(Terminal)中输入以下命令: sudo fdisk -l 这个命令将显示有关…

    其他 2023年3月28日
    00
  • 怎么制作Windows7封装自动应答文件

    制作Windows7封装自动应答文件需要进行以下步骤: 1.准备工作 在进行制作自动应答文件之前,需要先准备好以下工具和材料: 一台可以安装并运行Windows7操作系统的电脑。 Windows系统镜像文件(ISO格式),可以从Microsoft官网下载。 Windows AIK(自动化安装工具包)下载链接:https://www.microsoft.com…

    other 2023年6月25日
    00
  • windows server 2012 dhcp服务器安装图解

    请先访问我们网站上的“Windows Server 2012 DHCP服务器安装图解”文章,获取简要的信息。然后,我们可以开始详细讲解其完整攻略。 Windows Server 2012 DHCP服务器安装图解 步骤一:打开服务器管理器 首先,在左下角点击桌面的“开始”按钮,选择“服务器管理器”打开。 步骤二:选择“添加角色或功能” 在“服务器管理器”中,选…

    other 2023年6月27日
    00
  • 详解C++-(=)赋值操作符、智能指针编写

    详解C++-(=)赋值操作符、智能指针编写 1. (=)赋值操作符 C++中,(=)是一种赋值操作符。它允许我们将一个值赋值给一个变量。在C++中,(=)是右结合的,也就是说,赋值语句的右边的操作数先被计算。 例如,我们有一个类Person,它有一个name字符串和一个age整数: class Person { string name_; int age_;…

    other 2023年6月26日
    00
  • SQl 语句(常见)

    SQL(Structured Query Language)是一种用于管理关系型数据库的语言。它是一种标准化的语言,基本规则适用于大多数数据库管理系统(DBMS)。在本篇文章中,我们将详细讲解常见的SQL语句,以及它们的作用和用法。 数据库的常见 SQL 语句 CREATE CREATE语句用于在数据库中创建新的表格、视图或者存储过程。 示例1 CREATE…

    other 2023年6月25日
    00
合作推广
合作推广
分享本页
返回顶部