C++类继承:派生类的构造函数

2023-10-27

派生类不能直接访问基类的私有成员,必须使用基类的公有方法来访问基类的私有成员。这意味着派生类的构造函数必须使用基类的构造函数来设置从基类中继承的私有成员

因此,在程序使用派生类构造函数创建派生类对象之前,要使用基类构造函数创建基类对象。C++中,使用成员初始化列表完成这种工作。

示例:

class A

{

public:

            A(int a);

            A();//默认构造函数

private:

            int a_;

};

class B: public A

{

public:

            B(int b, int a);

            B();//默认构造函数

private:

            int b_;

};

A::A(int a)           //A的构造函数

{

     a_=a;

}

B::B(int b,int a):A(a)       //B的构造函数,使用成员初始化列表创建A,B中的变量b_也可以采用成员初始化列表初始化,如

{                                                                                                                                                                                 //           b_(b)

     b_=b;

}

假设主程序中包含如下语句:

B  test(1,2);// 定义了一个变量名为test的B类变量,并初始化

B的构造函数首先将实参1,2赋给形参b,a,然后将a作为实参传递给构造函数A(int a),并创建一个嵌套的A类的对象,将2赋给a_保存到该对象中,然后进入B的构造函数体,完成B类对象的创建,并将参数值1赋给b_。

注:

1. 如果派生类构造函数省略成员初始化列表,程序将默认使用基类的默认构造函数,除非要是使用默认构造函数,否则应显式调用正确的基类构造函数。

示例:

B::B(int b,int a)       //  :A()默认的基类构造函数

{                                                                                                                                                                                 

     b_=b;

}

2. 派生类构造函数中,也可以调用基类的复制构造函数

示例:

B::B(int b,A a) :A(a)      //  :如果没有定义A类显示构造函数的话,则A(a)将调用A类的隐式复制构造函数

{                                                                                                                                                                                 

     b_=b;

}

3. 派生类在过期时,程序将首先调用派生类析构函数,然后再调用基类的析构函数。

 

 

 

 

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

C++类继承:派生类的构造函数 的相关文章

  • 【分布式】Zookeeper数据与存储

    一 前言 前面分析了Zookeeper对请求的处理 本篇博文接着分析Zookeeper中如何对底层数据进行存储 数据存储被分为内存数据存储于磁盘数据存储 二 数据与存储 2 1 内存数据 Zookeeper的数据模型是树结构 在内存数据库中
  • Centos7搭建sftp服务,window上filezilla连接

    1 创建sftp数据目录 添加群组用户 mkdir p data sftp sftp的数据目录 chmod 755 R data sftp 给ftp用户进入目录 chown root root R data sftp 需要使用chroot
  • Python 列表在内存中的顺序存储

    列表在内存中的存储空间是连续的 因此在创建列表时 首先向操作系统申请一块固定大小的内存空间 来存储每个列表元素 例如 a 1 2 3 4 由于在 python 中 int 类型的数据占4个字节 因此这条语句会向操作系统申请 4 4 16 b
  • js对象数组根据某一属性查找对象

    js对象数组 name zhangsan age 20 name lisi age 30 如果想查找name是zhangsan的这个对象 传统方法可以根据for if条件遍历 也可以用map重新构造 或者组装新对象 1 组装新对象 list
  • Python实现ARMA模型

    1 导入相关包 查看数据情况 import numpy as np import pandas as pd import matplotlib pyplot as plt plt rcParams font sans serif SimHe
  • android开发浅谈之PackageManagerService(pkms)

    本文基于Android10 0 主要从以下几个方面着手 PKMS启动 PKMS安装APK PKMS卸载APK PKMS启动 这里我简单的将其分为以下几个步骤 1 SystemServer通过PKMS的main方法启动PKMS 2 PKMS构
  • pLSA/mixture unigram/gmm em算法公式汇总

    1 LSA 隐性语义分析 和SVD 奇异值分解 在VSM 文档空间向量模型中 在文章看做词袋的集合 将文档转换为同一空间向量进行计算 聚类 分类 文本检索是减少计算量 但是难以考虑文档位置以及文档的一词多义性 基于SVD分解 我们可以构造一
  • 在Mac下vs code配置Python开发环境

    背景 之前用的捷克公司JetBrains的系列软件之一Pycharm 也是非常的好用 但是要收费 对于我等穷屌丝来说 有点吃不消 开流节源 我找了一款免费的开发软件 而且是近年来崛起的 vscode 而且是一个开源项目 微软出品 什么是 V
  • Django调用Nameko微服务使用简介

    Nameko is a framework for building microservices in Python The example requires RabbitMQ because it s using the Nameko b
  • 软考中级软件设计师--7.设计模式

    设计模式 参考 https www yuque com saodai ss8tp9 B站视频 我这里只是个做个笔记 设计模式最好结合UML 类图并且结合实际代码学习 最好还是看上边视频中相关内容 创造型设计模式 概念 创造型设计模式抽象了实
  • Apache Doris : 一个开源 MPP 数据库的架构与实践

    分享提纲 Doris 背景介绍 适用场景 案例介绍 Doris 整体架构 Doris 关键技术 Doris 背景介绍 介绍 Doris 的整体架构 以及 Doris 的一些特性 一 Doris Doris 是分布式 面向交互式查询的分布式数
  • 怎么判断ios设备、移动设备、浏览器

    Navigator Navigator接口表示用户代理的状态和标识 允许脚本查询它和注册一些自己的服务 我们可以通过window navigator来访问Navigator对象 常用属性 Navigator appVersion 浏览器版本

随机推荐

  • git-创建release

    git tag a v0 1 1 m Release test git push origin v0 1 1
  • 前端开发微信支付宝支付流程

    微信支付的流程 我认为有几种方案 微信支付 async payOrder 1 创建订单 const orderInfo order price 0 1 consignee addr this addstr goods this cart f
  • 什么是缓冲区?(详细!!!!!干货!!!!!)

    缓冲区 缓冲区其实是不存在的 只不过是我们认为想象出来的 1 把数据写入文件之前 会先写入缓冲区 刷新时才会写入文件内 2 我们所说的缓冲区 实际 只有库函数中存在 3 文件流指针所应用的 文件描述符没有 知识点 1 使用printf向文件
  • 关于Gitlab恼人的Git无权限访问问题解决

    问题 不知什么时候起 从gitlab com上新开的项目中拿代码时 冒出ERROR The project you were looking for could not be found or you don t have permissi
  • docker-compose重新启动Mysql报错changing ownership of ‘/var/lib/mysql/mysql.sock‘: No such file or direct

    一 背景 最近在使用 docker compose 编排整合一个项目 springboot mysql 的时候 首次启动后重新再启动的时候 mysql 容器启动失败 通过 docker logs 命令查看 mysql 容器的启动日志如下 c
  • ajax穿formdata,ajax formdata格式问题

    慕容708150 貌似是因为没有name属性 修改如下 HTML 发布评论JavaScript function postComment var commentForm document getElementById comment for
  • apache转发tomcat http转https

    最近在弄小程序 而小程序网络请求所需要的链接需要https安全链接 之前胡乱配置一番可以用了 不过并不太理解 后来又需要一个php项目 各处查看了一下 需要apache服务器 而我的只有一个域名 已经给了tomcat了 如果在域名后面加端口
  • 2020-10-07

    渗透测试 U盘监控器 1 打开USB监控器 注册时输入任意注册码 出现注册失败页面 2 在Winhex打开USB监控器 exe 文本搜索 注册失败 之后推出字符串文件偏移地址为0x81A79 引用该字符串的指令在字符串地址的常量为0x048
  • Java09

    一 继承 在Java中 使用关键字extends来继承类 父类 public class Fu int num 100 public void methodfu System out println num 子类继承 关键字 public
  • dns服务器项目实例,DNS服务器配置实例-----主DNS服务器

    DNS服务器配置简单实例 主DNS服务器 DNS服务器类型 主DNS服务器 master 辅助DNS服务器 slave 高速缓存服务器 hint 安装bind三部曲 1 查询包是否已经安装 Nborn root 08 06 rpm q bi
  • esp32 Micropython驱动ST7735 1.8寸TFT屏幕 中文显示;时间显示、网络network实时时间获取utptime;urequests、upip等包安装

    参考 https blog csdn net weixin 57604547 article details 122274614 0 线连接 IO就是GPIO引脚 ESP32 TFT 屏ST7735 GND GND 3 3V VDD IO2
  • springboot集成shiro

    这里写自定义目录标题 Springboot集成shiro Shiro介绍 springboot集成shiro Springboot集成shiro Shiro介绍 Shiro是Apache 的一个开源项目 是一个java的安全框架具有认证 授
  • Open Euler学习

    Open Euler学习 目录 Open Euler学习 Open Euler安装截图 使用MobaXterm exe软件 连接自己的操作系统 作业问题 1 使用什么命令查看 ip 地址及接口信息 2 cp和mv命令有什么区别 用什么指令将
  • EM算法推导(收敛性证明和在GMM中的应用)

    一 EM算法的提出 当你有一组数据像如下这样 Note picture source 显然用单个高斯分布模型去拟合它们效果不好 这是一个典型的高斯混合模型的例子 p X
  • TypeError: strptime() takes no keyword arguments ValueError(“‘%s‘ is a bad directive in format ‘%s‘“

    t datetime datetime strptime 2021 5 12 09 28 11 format Y m d h m s 1 错误原因 参数格式不匹配 strptime定义 def strptime data string fo
  • leveldb(六):key的不同种类型

    有5个key的概念 可能会让人混淆 下面就来一个一个的分析 User key 最简单的key了 就是用户传入的数据 Slice user key ParsedInternalKey enum ValueType kTypeDeletion
  • sqlite3交叉编译

    1 交叉编译sqllite3可以先从官网下载最新最新的源码进行编译 sqlite3下载sqlite3有两种版本的源代码 sqlite amalgamation 3300100 zip这种是将所有的操作放到sqlite3中进行使用的 虽然官方
  • 特征筛选1——根据方差筛选(单变量筛选)

    根据给定方差的阈值 删除掉值变化小的维度 以此降低数据规模 当把阈值设置为0的时候 就会删除没有变化的数据 示例 import numpy as np from sklearn feature selection import Varian
  • 【模板】组合数取模

    文章目录 1 利用递推式预处理组合数取模 2 预处理阶乘的余数和阶乘逆元的余数 3 卢卡斯定理 4 将组合数分解质因数 高精度乘低精度 1 利用递推式预处理组合数取模 题目描述 给定 n n n 组询问 每组询问给定两个整数 a
  • C++类继承:派生类的构造函数

    派生类不能直接访问基类的私有成员 必须使用基类的公有方法来访问基类的私有成员 这意味着派生类的构造函数必须使用基类的构造函数来设置从基类中继承的私有成员 因此 在程序使用派生类构造函数创建派生类对象之前 要使用基类构造函数创建基类对象 C