C++编译器为类自动生成的函数

2023-11-17

我们可以构建一个空类,

class Empty
{
};

尽管没有定义任何函数,但我们可以通过以下方式使用这个类:

Empty e1;
Empty e2(e1);
e2 = e1;

因为当编译器发现你用上述方式使用这个类而却在类声明中没有定义一般构造函数(非复制构造函数)、复制构造函数、赋值操作符重载函数和析构函数时,会自动为其生成这些函数,上面的Empty类经编译后就对应着下面的类:

class Empty
{
public:
    Empty(){...};
    Empty(const Empty& rhs){...};
    ~Empty(){...};
    Empty& operator=(const Empty& rhs){...};
};

编译器生成的默认构造函数和析构函数的主要任务是分别调用基类和非静态成员变量的构造和析构函数。生成的复制构造函数和赋值操作符重载函数只是单纯的将源对象的每一个非静态变量拷贝给目标对象。

/******************************************
 * simple_class.cpp                       *
 *                                        *
 * C++自动生成的函数                      *
 ******************************************/

#include <string>
#include <iostream>

class Simple
{
  std::string name;
  int age;

public:
  void SetName(std::string name)
  {
    this->name = name;
  }

  void  SetAge(int age)
  {
    this->age = age;
  }
  void Print()
  {
    std::cout<<"name="<<name<<","<<"age="<<age<<std::endl;
  }
};

int main()
{
  Simple s1;
  std::cout<<"s1: ";
  s1.Print();

  std::cout<<"s1: ";
  s1.SetName("Jim");
  s1.SetAge(20);
  s1.Print();

  std::cout<<"s2: ";
  Simple s2(s1);
  s2.Print();

  Simple s3;
  s3.SetName("Tom");
  s3.SetAge(25);
  std::cout<<"s3: ";
  s3.Print();
  s3 = s2;
  std::cout<<"s3: ";
  s3.Print();

  return 0;
}

生成的函数

赋值操作符重载函数只有当编译器生成的代码是合法且有意义时才会由编译器自动生成。

/****************************************
 * wired_employee.cpp                   *
 *                                      *
 * 不合法的赋值运算符重载函数不会
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++编译器为类自动生成的函数 的相关文章

随机推荐

  • 股票为什么会涨停?

    原文地址 http news xinhuanet com stock 2004 02 17 content 1318785 htm 股票为什么会涨停 要回答这个问题 有必要先说清楚什么是停板 停板是股票市场中的一种游戏规则 它是为了防止股票
  • 学习C# 哈希表(HashTable)用法

    学习C 哈希表 HashTable 用法 1 哈希表 HashTable 简述 在 NET Framework中 Hashtable是System Collections命名空间提供的一个容器 用于处理和表现类似keyvalue的键值对 其
  • list要点

    基本操作 erase函数 remove函数 特殊变动性操作 List迭代器 list与vector 异常处理 list本质是一个双向链表 其模板定义如下 namespace std template
  • 刷脸支付秒过地铁太快太方便

    刷脸支付让人们生活更便捷 公交卡 零钱 手机统统不用带 在广州 坐地铁只要刷脸就可以啦 据媒体报道 近日 广州首个智慧地铁站开通 乘客可以刷脸无感过闸 300毫秒内完成人脸识别 每分钟可通行40人 几年前 刷脸 还是朋友间用来互相调侃的 转
  • 给服务器端的.git瘦身

    一 背景 git库擅长管理文本型的文件 二进制文件一版不建议用git管理 现在我们已经用git管理的二进制文件 并且已经有了上百个提交 多个分支 且存储的二进制文件的总和已经相当庞大 可能几十个G 上百G 这给我们的git管理带来了以下3问
  • 嵌入式C语言之位操作详解

    1 位操作符 位操作直接将两个操作数按照二进制对应进行操作 例 0xaa 位与 0xf0 0xa0 逻辑操作是 两个操作数整体来操作 例 0xaa 逻辑与 0xf0 1 嵌入式的移位操作针对于无符号数 左移时右侧补0 右移时左侧补0 相当于
  • Python爬虫从入门到精通:(12)cookie_Python涛哥

    什么是cookie 是存储在客户端的一组键值对 web中cookie的典型应用 免密登陆 cookie和爬虫之间的关联 sometime 对一张页面进行请求的时候 如何请求的过程中不携带cookie的话 那么我们是无法请求到正确的页面数据
  • P5731 【深基5.习6】蛇形方阵

    题目描述 给出一个不大于 9 的正整数 n 输出n n 的蛇形方阵 从左上角填上 1 开始 顺时针方向依次填入数字 如同样例所示 注意每个数字有都会占用 3 个字符 前面使用空格补齐 输入格式 输入一个正整数 n 含义如题所述 输出格式 输
  • VMware虚拟机安装Linux 系统步骤

    一 获取安装包与系统镜像 VMware安装包下载 直接去访问我之前的博客 安装VMware虚拟化软件 何妨呀 的博客 CSDN博客 分享两个系统镜像资源库 下载Linux系统镜像 清华大学开源镜像站 清华大学开源软件镜像站 Tsinghua
  • [Web前端基础] CSS优先级、JS运算优先级、CSS设置在第几行进行超出部分省略号、JS设置元素样式的六种方式

    CSS优先级 important gt 行内样式 gt id选择器 gt 类选择器 gt 标签选择器 gt 通配符选择器 gt 继承 如果有多个复合选择器选中同一个元素 则需要通过权重计算确定优先级 挡住的是 标签选择器的个数 注意 只要是
  • win11出现:终止代码:SYSTEM SERVICE EXCEPTION解决方案实列(不懂请私信up主)

    有关此问题的详细信息和可能的解决方法 请访问 https www windows com stopcode 如果致电支持人呗 请向他们提供以下信息 终止代码 SYSTEM SERVICE EXCEPTION 终止代码解释 SYSTEM SE
  • Sublime, Vscode 快捷键

    vsCode 快捷键 Tips 编码规范 很多大型开源项目缩进其实不是4个空格 而是两个空格 比如 vue react 源码 当然还是具体看公司的代码是怎么规范的 在 VScode 里设置 tab 为2个空格方法 File Preferen
  • Mathorcup数学建模竞赛第六届-【妈妈杯】B题:车位分布的优化设计与评价(附一等奖获奖论文、C++和matlab代码)

    赛题描述 随着现代社会经济的快速发展 房地产成为国家经济发展中重要的经济增长点之一 而小区内汽车停车位的分布对于小区居民的上下班出行影响很大 请建立数学模型 解决下列问题 问题1 分析评判小区汽车停车位分布是否合理的几个关键指标 建立评判车
  • 基于ESP32的数据采集端

    背景介绍 数据采集设备属于物联网领域的标准件 广泛应用于工业 医疗 通讯以及教育等场景 调研发现 数据采集设备主要由硬件系统和软件代码两部分组成 近年来 随着技术的发展 工程技术人员通过编写各种程序算法 不断的挖掘硬件的性能 不仅降低了硬件
  • 一文读懂selenium自动化测试(基于Python)

    前言 我们今天来聊聊selenium自动化测试 我们都知道selenium是一款web自动化测试的工具 它应该如何去运用呢 我们接着看下去 1 Selenium简介 1 1 Selenium Selenium是一款主要用于Web应用程序自动
  • hive面试题

    Hive面试总结 什么是 Hive Hive结构描述 Hive的优势 内部表 外部表 分区表 分桶表 hive中 排序的种类和适用场景 动态分区和静态分区的区别 使用场景 hive 语句执行顺序 Hive的几种存储方式 列式存储的好处 HQ
  • 《期权、期货及其他衍生产品》读书笔记(第三章:利用期货的对冲策略)

    3 1 基本原理 完美对冲 Perfect Hedge 指完全消除风险的策略 一劳永逸 保完即忘Hedge and Forget Strategy 一旦设定对冲策略后 无需在对其进行调整 空头对冲 Short Hedge 对冲者选择期货的空
  • 前端面试总结

    前端面试 一 计算机网络 1 HTTP和HTTPS HTTP的基本概念 http 是互联网上应用最为广泛的一种网络协议 是一个客户端和服务器端请求和应答的标准 TCP 用于从 WWW 服务器传输超文本到本地浏览器的超文本传输协议 HTTP工
  • java 盲水印实现比其他版本的速度更快 !!!

    该盲水印版本速度上更快 参照了c的底层实现改编的 java 语法 结合先人的经验得以完成 希望能帮助有困惑的朋友 实测代码有效 下面就是我的代码实现 首先是盲水印工具类 导入类 import org bytedeco javacpp Loa
  • C++编译器为类自动生成的函数

    我们可以构建一个空类 class Empty 尽管没有定义任何函数 但我们可以通过以下方式使用这个类 Empty e1 Empty e2 e1 e2 e1 因为当编译器发现你用上述方式使用这个类而却在类声明中没有定义一般构造函数 非复制构造