C++继承、构造函数和析构函数

2023-11-18

构造函数 与 析构函数

构造函数代表一个对象的生成,主要作用是初始化类的成员变量,可以被重载
如果没有显式构造函数,则实例化对象时,系统会自动生成一个无参的构造函数
构造函数的名称与类名相同

析构函数代表的是一个对象的销毁,不可以被重载
析构函数的名称是 ~类名()

class Animal
{
public:
	string name;
	int age;
	Animal():name("dog"), age(12)  //显式无参构造函数,这里借助c++11的列表初始化
	{
		cout << "这是无参构造函数" << endl;
	}

	Animal(string name, int age)  //显式有参构造函数
	{
		this->name = name;
		this->age = age;
		cout << "这是有参构造函数" << endl;
	}
	~Animal(){};  //析构函数
};

Animal dog1; //会调用无参构造函数
Animal dog2("xiaohei",12); //会调用显式有参构造函数

注意事项:构造函数/析构函数 如果显式调用,则必须是public权限

C++封装

作用:保证数据安全性

三种权限
public:类内可以访问 子类可以访问 类外可以访问
protected:类内可以访问 子类可以访问 类外不可以访问
private:类内可以访问 子类不可以访问 类外不可以访问

C++继承

作用:实现代码复用,节省代码量

继承中的构造函数和析构函数

class Animal
{
public:
	string name;
	int age;
	Animal():name("dog"), age(12)
	{
		cout << "这是基类无参构造函数" << endl;
	}

	Animal(string name, int age)
	{
		this->name = name;
		this->age = age;
		cout << "这是基类有参构造函数" << endl;
	}
	~Animal()
	{
		cout << "这是基类析构函数" << endl;
	}
};

class Dog:public Animal  //公有继承自Animal类
{
public:
	string name;
	int age;
	Dog()
	{
		cout << "这是Dog类无参构造函数" << endl;
	}

	Dog(string name, int age)
	{
		this->name = name;
		this->age = age;
		cout << "这是Dog类有参构造函数" << endl;
	}
	~Dog()
	{
		cout << "这是Dog类析构函数" << endl;
	}
};

void Func1()
{
	Dog dog1();
	Dog dog2("小黑", 12);
}

int main()
{
	Func1();
	system("pause");
}

在这里插入图片描述

基类的构造函数和析构函数不会继承给派生类,但会在派生类生成对象时调用
构造函数调用顺序:先调用基类无参构造函数,再调用派生类的构造函数,如果想要调用基类的有参构造函数,需要显式调用 Dog(string name, int age) : Animal(name, age)
析构函数调用顺序:先调用派生类析构函数,再调用基类析构函数

顺便讲一下函数重载、函数重定义和函数重写的区别

函数重载:函数名相同,函数参数列表不同(参数类型、参数顺序、参数个数),通过传入不同的实参,调用不同的函数,执行不同的功能
函数重定义:当发生继承关系的时候,子类和父类存在同名函数,子类会 隐藏 父类的同名函数,执行自己的函数
函数重写:当发生继承关系的时候,父类提供虚函数,子类 重写(覆盖) 父类的虚函数,展现的是子类的功能

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++继承、构造函数和析构函数 的相关文章

  • 如何在MVVM中管理多个窗口

    我知道有几个与此类似的问题 但我还没有找到明确的答案 我正在尝试深入研究 MVVM 并尽可能保持纯粹 但不确定如何在坚持模式的同时启动 关闭窗口 我最初的想法是向 ViewModel 发送数据绑定命令 触发代码来启动一个新视图 然后通过 X
  • 当我使用“control-c”关闭发送对等方的套接字时,为什么接收对等方的套接字不断接收“”

    我是套接字编程的新手 我知道使用 control c 关闭套接字是一个坏习惯 但是为什么在我使用 control c 关闭发送进程后 接收方上的套接字不断接收 在 control c 退出进程后 发送方的套接字不应该关闭吗 谢谢 我知道使用
  • pthread_cond_timedwait() 和 pthread_cond_broadcast() 解释

    因此 我在堆栈溢出和其他资源上进行了大量搜索 但我无法理解有关上述函数的一些内容 具体来说 1 当pthread cond timedwait 因为定时器值用完而返回时 它如何自动重新获取互斥锁 互斥锁可能被锁定在其他地方 例如 在生产者
  • 如何忽略“有符号和无符号整数表达式之间的比较”?

    谁能告诉我必须使用哪个标志才能使 gcc 忽略 有符号和无符号整数表达式之间的比较 警告消息 gcc Wno sign compare 但你确实应该修复它警告你的比较
  • 当 contains() 工作正常时,xpath 函数ends-with() 工作时出现问题

    我正在尝试获取具有以特定 id 结尾的属性的标签 like span 我想获取 id 以 国家 地区 结尾的跨度我尝试以下xpath span ends with id Country 但我得到以下异常 需要命名空间管理器或 XsltCon
  • WPF 中的调度程序和异步等待

    我正在尝试学习 WPF C 中的异步编程 但我陷入了异步编程和使用调度程序的困境 它们是不同的还是在相同的场景中使用 我愿意简短地回答这个问题 以免含糊不清 因为我知道我混淆了 WPF 中的概念和函数 但还不足以在功能上正确使用它 我在这里
  • 为什么#pragma optimize("", off)

    我正在审查一个 C MFC 项目 在某些文件的开头有这样一行 pragma optimize off 我知道这会关闭所有以下功能的优化 但这样做的动机通常是什么 我专门使用它来在一组特定代码中获得更好的调试信息 并在优化的情况下编译应用程序
  • 将目录压缩为单个文件的方法有哪些

    不知道怎么问 所以我会解释一下情况 我需要存储一些压缩文件 最初的想法是创建一个文件夹并存储所需数量的压缩文件 并创建一个文件来保存有关每个压缩文件的数据 但是 我不被允许创建许多文件 只能有一个 我决定创建一个压缩文件 其中包含有关进一步
  • Json.NET - 反序列化接口属性引发错误“类型是接口或抽象类,无法实例化”

    我有一个类 其属性是接口 public class Foo public int Number get set public ISomething Thing get set 尝试反序列化Foo使用 Json NET 的类给我一条错误消息
  • 如果使用 SingleOrDefault() 并在数字列表中搜索不在列表中的数字,如何返回 null?

    使用查询正数列表时SingleOrDefault 当在列表中找不到数字时 如何返回 null 或像 1 这样的自定义值 而不是类型的默认值 在本例中为 0 你可以使用 var first theIntegers Cast
  • 指针减法混乱

    当我们从另一个指针中减去一个指针时 差值不等于它们相距多少字节 而是等于它们相距多少个整数 如果指向整数 为什么这样 这个想法是你指向内存块 06 07 08 09 10 11 mem 18 24 17 53 7 14 data 如果你有i
  • C# 中的递归自定义配置

    我正在尝试创建一个遵循以下递归结构的自定义配置部分
  • 将 unsigned char * (uint8_t *) 转换为 const char *

    我有一个带有 uint8 t 参数的函数 uint8 t ihex decode uint8 t in size t len uint8 t out uint8 t i hn ln for i 0 i lt len i 2 hn in i
  • 如何使我的表单标题栏遵循 Windows 深色主题?

    我已经下载了Windows 10更新包括黑暗主题 文件资源管理器等都是深色主题 但是当我创建自己的 C 表单应用程序时 标题栏是亮白色的 如何使我自己的桌面应用程序遵循我在 Windows 中设置的深色主题 你需要调用DwmSetWindo
  • 控制到达非 void 函数末尾 -wreturn-type

    这是查找四个数字中的最大值的代码 include
  • 在 Dynamics CRM 插件中访问电子邮件发件人地址

    我正在编写一个 Dynamics CRM 2011 插件 该插件挂钩到电子邮件实体的更新后事件 阶段 40 pipeline http msdn microsoft com en us library gg327941 aspx 并且在此阶
  • C - 直接从键盘缓冲区读取

    这是C语言中的一个问题 如何直接读取键盘缓冲区中的数据 我想直接访问数据并将其存储在变量中 变量应该是什么数据类型 我需要它用于我们研究所目前正在开发的操作系统 它被称为 ICS OS 我不太清楚具体细节 它在 x86 32 位机器上运行
  • 32 位到 64 位内联汇编移植

    我有一段 C 代码 在 GNU Linux 环境下用 g 编译 它加载一个函数指针 它如何执行并不重要 使用一些内联汇编将一些参数推送到堆栈上 然后调用该函数 代码如下 unsigned long stack 1 23 33 43 save
  • 使用 libcurl 检查 SFTP 站点上是否存在文件

    我使用 C 和 libcurl 进行 SFTP FTPS 传输 在上传文件之前 我需要检查文件是否存在而不实际下载它 如果该文件不存在 我会遇到以下问题 set up curlhandle for the public private ke
  • 使用按位运算符相乘

    我想知道如何使用按位运算符将一系列二进制位相乘 但是 我有兴趣这样做来查找二进制值的十进制小数值 这是我正在尝试做的一个例子 假设 1010010 我想使用每个单独的位 以便将其计算为 1 2 1 0 2 2 1 2 3 0 2 4 虽然我

随机推荐

  • 大厂真实Java面试题合集附答案(腾讯、阿里、字节跳动、百度、美团)

    这些面试题都是互联网大厂真实流出的面试内容 每个问题都附带完整详细的答案 不像网上的那些资料三教九流有的甚至还没答案 这些面试题我也是经过日积月累才整理出来的精品资料 这些面试题主要是针对1 5年左右的Java开发程序员提升的 不管是传统行
  • 实时音频编解码之五 噪声整形

    本文谢绝任何形式转载 谢谢 1 4 5 噪声整形 因压缩比特率而带来的量化误差会导致规律的噪声产生 即使量化带来的噪声能量上远小于语音信号 但是由于人的听觉系统对规律性的噪声非常敏感 因而非常影响听觉体验 噪声整形的目的是增加量化后解码信号
  • Python报错 AttributeError: ‘NoneType‘ object has no attribute ‘split

    Python报错 AttributeError NoneType object has no attribute split 源程序 raw line None dstID if line n pid ls append ID title
  • typora的images怎么设置相对路径

    我的软件安装在D Typora 分别有D Typora FilesSave和D Typora images 分别用来保存 md文件和用到的图片 首先preferences image启用copy image to custom folder
  • C++设计模式之抽象工厂模式

    之前讲到了C 设计模式 工厂方法模式 我们可能会想到 后期产品会越来越多了 建立的工厂也会越来越多 工厂进行了增长 工厂变的凌乱而难于管理 而且由于工厂方法模式创建的对象都是继承于Product的 所以工厂方法模式中 每个工厂只能创建同一产
  • 太好用了!Linux 服务器上必备的 4 个开源工具

    关注后回复 进群 拉你进程序员交流群 来自 开源最前线 今天和大家分享 4 个可以在 Linux 上运行的开源服务器 1 Samba Samba 是种自由软件 用来让 UNIX 系列的操作系统与微软 Windows 操作系统的 SMB CI
  • 响应式布局之REM

    REM是实现响应式布局的方案之一 除了REM之外 还有VM REM VM 今天主要来记录一下REM的实操 一 安装插件 npm install lib flexible npm install postcss plugin px2rem D
  • 第36章_瑞萨MCU零基础入门系列教程之步进电机控制实验

    本教程基于韦东山百问网出的 DShanMCU RA6M5开发板 进行编写 需要的同学可以在这里获取 https item taobao com item htm id 728461040949 配套资料获取 https renesas do
  • 史上最详细的快速排序算法

    史上最详细的快速排序算法 最近学了快速排序算法 在csdn上找了很多篇博客 虽然代码可以执行正确 但是解释却有点 官方 有很多细节 很多需要注意的地方并没有写到 故此 我写了这篇博客 看了我这篇博客 你绝对会恍然大悟 先给大家看看清楚明了的
  • 谁说不同品牌内存无法兼容-关键调整频率和内存时序

    高手绕道 菜鸟文 当时2018年买了两根光威DDR4 8G 3000的灯条 2019年手欠又买了两根威刚DDR4 8G 3000的黄金马甲条 两组内存条都是京东上买的 当时买完两组之后插上就看看电影 跑跑虚拟机看看网页没发现啥问题 结果过了
  • 力扣题---二叉树前、中、后序遍历

    二叉树前序遍历 我们先来了解题目 输入 root 1 null 2 3 输出 1 2 3 示例 2 输入 root 输出 示例 3 输入 root 1 输出 1 从示例不难看出 题目给定树的根结点 用前序遍历的方式 把二叉树的值放入数组中
  • 言情小说通用情节[转]

    第一部分 典型开篇 一 好美好神秘的人哦 一件惊艳加钟情 眼珠掉地上滚三圈 于是非君莫娶 嫁 死缠烂打 看欧的牛皮糖超级粘人功 二 你由于某些原因 比如漂亮可爱的外表 突如其来的爆炸 或者地上一块可怜的香蕉皮 而陷入危机的时候 那勇敢的 阿
  • Java操作Excel文件

    创建一个Excel文件 public static void creatExcelFile String filepath Workbook wb new XSSFWorkbook try FileOutputStream fileOut
  • Telink BLE MESH开发

    一 前言 官网资料介绍建议采用DMA传输 串口数据的接收是放到了fifo中 但是串口发送也是采用的DMA 问题在于串口发送并没有建立缓冲器 而是判断当前DMA是否忙 如果忙数据直接丢弃 这样做显然不合理 如果发送时DMA忙应该将数据放到缓冲
  • vscode连接远程Linux服务器失败

    vscode连接远程Linux服务器失败 文章目录 vscode连接远程Linux服务器失败 解决连接失败 设置密钥免密登录 解决连接失败 问题 vscode会不断的提示你去输入密码 然后一直retry 还是失败 但是使用其它远程连接工具比
  • IMX6ULL_Pro开发板基本操作(韦东山学习笔记)

    NAT网卡 桥接网卡 配置桥接网卡 驱动 为什么编译驱动程序之前要先编译内核 1 配置编译 内核 设备树 其他驱动程序 2 放到板子上 3 编译 测试第1个驱动 IMX6ULL Pro烧写系统
  • 公司重用我独立负责一个核心系统,我该怎么设计系统的高可用架构?

    V xin ruyuanhadeng获得600 页原创精品文章汇总PDF 目录 业务场景引入 业务系统消息同步丢失 计费业务系统的计费问题 计费业务数据补偿系统设计 背景 今天给大家分享一个话题 就是对于线上跟钱有关的计费类的系统 在线上可
  • 秒杀抢购思路以及高并发下数据安全

    转载地址 https my oschina net wangjie404 blog 815455 我们通常衡量一个Web系统的吞吐率的指标是QPS Query Per Second 每秒处理请求数 解决每秒数万次的高并发场景 这个指标非常关
  • 6招玩转 Appium 自动化测试

    Appium是个什么鬼 Appium是一个移动端的自动化框架 可用于测试原生应用 移动网页应用和混合型应用 且是跨平台的 可用于IOS和Android以及firefox的操作系统 原生的应用是指用android或ios的sdk编写的应用 移
  • C++继承、构造函数和析构函数

    构造函数 与 析构函数 构造函数代表一个对象的生成 主要作用是初始化类的成员变量 可以被重载 如果没有显式构造函数 则实例化对象时 系统会自动生成一个无参的构造函数 构造函数的名称与类名相同 析构函数代表的是一个对象的销毁 不可以被重载 析