C++构造函数+复制构造函数+重载等号运算符调用

我们先从C++的构造函数开始。

构造函数

构造函数是一种特殊的成员函数,用于在对象创建时执行初始化操作。它的名称与类名相同,没有返回类型。

class Person {
public:
    Person(); // 默认构造函数
    Person(const char* name, int age); // 带参构造函数
private:
    char* m_name;
    int m_age;
};

Person::Person() {
    m_name = nullptr;
    m_age = 0;
}

Person::Person(const char* name, int age) {
    m_name = new char[strlen(name) + 1];
    strcpy(m_name, name);
    m_age = age;
}

以上代码定义了两个构造函数,其中第一个是默认构造函数,用于创建一个空的Person对象,第二个是带参构造函数,用于创建一个具有名字和年龄的Person对象。示例:

Person p1; // 调用默认构造函数
Person p2("Tom", 20); // 调用带参构造函数

复制构造函数

复制构造函数是一种特殊的构造函数,用于创建一个新对象并将旧对象的内容复制到新对象中。它的名称为类名,参数为一个常量引用类型的对象。

class Person {
public:
    Person(); // 默认构造函数
    Person(const char* name, int age); // 带参构造函数
    Person(const Person& other); // 复制构造函数
private:
    char* m_name;
    int m_age;
};

Person::Person(const Person& other) {
    m_name = new char[strlen(other.m_name) + 1];
    strcpy(m_name, other.m_name);
    m_age = other.m_age;
}

以上代码定义了一个复制构造函数。示例:

Person p1("Tom", 20);
Person p2 = p1; // 调用复制构造函数

重载等号运算符

重载等号运算符是一种特殊的成员函数,用于实现对象之间的赋值。它的名称为“operator=”,参数为一个常量引用类型的对象。

class Person {
public:
    Person(); // 默认构造函数
    Person(const char* name, int age); // 带参构造函数
    Person(const Person& other); // 复制构造函数
    ~Person(); // 析构函数
    Person& operator=(const Person& other); // 重载等号运算符
private:
    char* m_name;
    int m_age;
};

Person::~Person() {
    delete[] m_name;
}

Person& Person::operator=(const Person& other) {
    if (this != &other) {
        delete[] m_name;
        m_name = new char[strlen(other.m_name) + 1];
        strcpy(m_name, other.m_name);
        m_age = other.m_age;
    }
    return *this;
}

以上代码定义了一个重载等号运算符。示例:

Person p1("Tom", 20);
Person p2("John", 25);
p2 = p1; // 调用重载等号运算符

以上就是C++构造函数、复制构造函数和重载等号运算符的完整攻略,希望能对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++构造函数+复制构造函数+重载等号运算符调用 - Python技术站

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

相关文章

  • Java8 Optional原理及用法解析

    Java 8 Optional原理及用法解析 1. Optional的原理 Optional是Java 8引入的一个容器类,用于解决空指针异常的问题。它可以包含一个非空的值,也可以表示一个空值。Optional类的设计目的是为了更好地处理可能为空的值,避免使用传统的null检查。 Optional类的实现原理如下: Optional类是一个泛型类,可以包含任…

    other 2023年10月16日
    00
  • Java super关键字的使用方法详解

    Java super关键字的使用方法详解 在Java中,使用super关键字可以访问父类的方法和属性。本文将详细介绍在Java中如何使用super关键字以及其使用方法。 super关键字的基本用法 使用super调用父类的构造方法 子类的构造方法可以调用父类的构造方法来完成父类实例的构造。使用super关键字来调用父类的构造方法,格式如下: public c…

    other 2023年6月27日
    00
  • Python设计模式之工厂方法模式实例详解

    Python设计模式之工厂方法模式实例详解 什么是工厂方法模式? 工厂方法模式是一种创建型设计模式,它定义了一种用于创建对象的接口,让子类决定将哪一个类实例化。工厂方法模式使一个类的实例化延迟到其子类。 工厂方法模式的优点有哪些? 保持了良好的封装性,让客户端不需要知道具体的产品类,只需要知道工厂类即可。 简化了系统的扩展性,客户端只需要知道新的具体产品类名…

    other 2023年6月27日
    00
  • java订单号生成的几种方式

    Java订单号生成的几种方式 在Java应用程序中,生成订单号是一个非常常见的需求。而如何生成一个合理、唯一的、规范的订单号,也是一个需要我们深入研究的问题。本文将介绍几种常见的Java订单号生成方式,包括UUID、时间戳、自增序列、分布式ID等。 UUID方式 UUID即通用唯一识别码,它是一种由网络软件生成的标准化的128位唯一标识符,通常用于标识软件构…

    其他 2023年3月28日
    00
  • 解决django服务器重启端口被占用的问题

    解决django服务器重启端口被占用的问题 当我们在进行django开发时,经常需要启动一个本地的服务器来进行调试和测试。但是有时候,在关闭服务器后再次启动服务器时,我们会发现端口被占用了,这时候我们就需要解决这个问题。 查找占用端口的进程并杀死它 我们可以使用命令行来查找正在占用端口的进程,并关闭它。具体操作步骤如下: ① 打开命令提示符或终端,运行以下命…

    other 2023年6月27日
    00
  • 最好的bt搜索sobt

    最好的BT搜索Sobt BT下载已经成为人们日常生活中的重要一环,如何选择一个好用的BT搜索引擎是每个BT爱好者都需要面对的问题。在众多的BT搜索引擎中,Sobt 以其简洁、高效、稳定著称,成为了众多用户的首选。 Sobt 界面简洁易用 Sobt 拥有清晰明了的界面,输入搜索关键词即可找到想要的资源。在搜索框中输入关键词后,Sobt 会智能识别你输入的内容,…

    其他 2023年3月29日
    00
  • PowerShell入门教程之Cmd命令与PowerShell命令相互调用的方法

    为了让用户能够更好地使用PowerShell,我们在网站上发布了一篇名为“PowerShell入门教程之Cmd命令与PowerShell命令相互调用的方法”的教程。以下是完整的攻略: 一、前言 随着PowerShell的兴起,越来越多的系统管理员开始使用PowerShell来代替Cmd命令。但是,有些时候我们仍然需要使用Cmd命令。那么,如果我们在Power…

    other 2023年6月26日
    00
  • C语言动态内存分配图文讲解

    C语言动态内存分配图文讲解 动态内存分配是C语言中一种重要的内存管理技术,它允许程序在运行时动态地分配和释放内存。本文将详细讲解C语言动态内存分配的过程和示例。 1. 动态内存分配的函数 C语言提供了两个主要的函数来进行动态内存分配: malloc():用于分配指定大小的内存块,并返回指向该内存块的指针。 free():用于释放之前分配的内存块。 2. 动态…

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