C++初始化参数列表(类的组合)

2023-11-01

A.类的组合

  • 定义:类的组合就是以另一个的对象为数据成员

  • 注意:要优先使用组合而不是继承;组合表达式的含义一部分的关系

  • 类的组合案例分析:

 1.类组合包含的类的对象,必须采用初始化参数列表方式调用各自类当中的构造函数去初始化

2.要通过包含的类的构造函数决定组合类的构造函数怎么写

3.组合中初始化参数列表的写法 :

B.初始化参数列表

注意:初始化参数列表是构造函数的另一种写法

应用场景:

  • 形参名和数据成员相同,避免二义性问题

  • 类和组合 必须要初始化参数列表的方式写构造

  • 常数据成员必须采用初始化参数列表的方式

  • 继承中子类的构造函数也必须初始化参数列表的方式

  • 具体代码:

    注意:

  • 组合类必须要调用包含对象所属类的构造函数

  • 形式上看不到包含对象所属类构造函数调用,必须准备无参的构造函数

C.组合中构造和析构顺序问题

  • 一般构造顺序和析构是相反

  • 类的组合中,优先构造包含对象,在构造自身对象

  • 类的组合中,包含对象的构造顺序只和定义顺序有关,和初始化参数列表无关

  • 举例:

D.类中类

定义:类中类就是一个类定义在另一个类当中

  • 掌握访问类中类中即可

  • 掌握类中的函数在类实现的写法

#include <iostream>
using namespace std;
struct Node
{
    int data;
    Node* next;
    Node() :next(nullptr) {}
    Node(int data) :data(data), next(nullptr) {}
    Node(int data, Node* next) :data(data), next(next) {}
};
class List
{
public:
    List();
    void insertData(int data);
    void printList() 
    {
        Node* pmove = headNode->next;
        while (pmove != nullptr)
        {
            cout << pmove->data << " ";
            pmove = pmove->next;
        }
        cout << endl;
    }
    Node* begin()
    {
        return headNode;
    }
private:
    Node* headNode;

public:
    //类中类
    class Iterator 
    {
    public:
        Iterator(Node* pmove=nullptr);
    private:
        Node* pmove;
    };
};
List::List() 
{
    headNode = new Node;
}
void List::insertData(int data)
{
    headNode->next = new Node(data, headNode->next);
}
//类中类的访问剥洋葱
List::Iterator::Iterator(Node* pmove):pmove(pmove)
{

}
int main() 
{
    List list;
    List::Iterator it=list.begin();
    list.insertData(1);
    list.insertData(2);
    list.insertData(3);
    list.printList();
    return 0;
}

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

C++初始化参数列表(类的组合) 的相关文章

随机推荐

  • Java String类中的equals方法

    Java String类的方法equals equal比较的是两个对象所表示的字符是否相等 而 比较的是两个对象是否相等 分析 s1 equals s 只是比较两个对象中的字符是否相等 与对象类型无关 public boolean equa
  • 【特异性双端队列

    题目描述 特异性双端队列 最小调整顺序次数 给定一个队列 但是这个队列比较特殊 可以从头部添加数据 也可以从尾部添加数据 但是只能从头部删除数据 输入一个数字n 会依次添加数字1 n 也就是添加n次 但是在添加数据的过程中 也会删除数据 要
  • webpack 中公共模块,基础库, 多次使用的公共方法单独抽离,以减少包体积和打包时间

    1 使用 html webpack externals plugin 插件 安装 html webpack externals plugin yarn add html webpack externals plugin 配置 webpack
  • 【Docker安装Yapi完整操作步骤】

    Docker安装Yapi完整操作步骤 建议收藏 一 前言 二 准备工作 2 1 安装Docker 2 2 Docker安装MongoDB数据库 2 3 用Navicat连接一下MongoDB查看是否安装成功 三 Docker安装Yapi 3
  • XCode环境变量及路径设置

    一般我们在xcode里面配置包含工程目录下头文件的时候 都要关联着相对路径和绝对路径 如果只是自己用这个项目 用绝对路径的问题不大 但是如果你把工程发给别人 别人就要在改这个绝对路径 这时候绝对路径的缺点立马出现 所以在修改User Hea
  • elk笔记13--Queries-term-level queries

    elk笔记13 Queries term level queries 1 term level 查询简介 2 term level 查询类型 2 1 exists query 2 2 fuzzy query 2 3 ids query 2
  • 【Linux报错】VM虚拟机的CentOS7系统启动时报Generating /run/initramfs/rdsosreport.txt

    一 场景 因Linux无故关机 重启后报错Generating run initramfs rdsosreport txt 二 解决 1 解决步骤 查看 dev mapper下有什么文件 执行xfs repair 重启 2 具体步骤如下 查
  • 服务器云管理系统设计与开发,服务器云管理系统设计与开发

    服务器云管理系统设计与开发 内容精选 换一换 云硬盘 Elastic Volume Service EVS 可以为云服务器提供高可靠 高性能 规格丰富并且可弹性扩展的块存储服务 可满足不同场景的业务需求 适用于分布式文件系统 开发测试 数据
  • struts2+hibernate+spring整合各个相关的配置文件

    一 先把struts2 struts2 2 1 1版 搭起来 1 先拷struts2的jar包 2 配置web xml
  • PyPI 镜像切换至国内源

    临时使用 pip install i https pypi tuna tsinghua edu cn simple some package 设为默认 确保pip更新至最新版本 python m pip install upgrade pi
  • java----关于Console类的报错

    public class console public static void main String args Console console System console String root console readLine 账户
  • 如何正确应用GNU GPLv3 和 LGPLv3 协议

    文章目录 前言 GNU GPLv3 0 Permissions 许可 Conditions 条件 Limitations 限制 GNU LGPLv3 0 应用GPLv3 0 应用LGPLv3 0 建议的内容 添加文件头声明 附录 GNU G
  • 让更多消费者接受刷脸支付养成刷脸习惯

    扫码支付能够取代现金和刷卡支付 就是基于其便捷的支付体验 消费者只要带上手机 用手机扫码就可以完成支付 免去了许多携带现金或卡的不便 降低了遗失风险 但是扫码支付也是过度依赖了手机这一媒介 在手机忘带和没电的时候 也是束手无策 基于此 刷脸
  • 慢SQL语句优化

    对慢SQL语句优化一般可以按下面几步思路 开启慢查询日志 设置超过几秒为慢SQL语句 抓取慢SQL语句 通过explain查看执行计划 对慢SQL语句分析 创建索引并调整语句 再查看执行计划 对比调优结果 参数 slow query log
  • git版本库创建三部曲(git权威指南笔记)

    1 全局配置 a 告诉git当前用户的姓名和邮箱 git config global user name heaiming git config global user email 576439313 qq com b 设置git命令别名
  • CSS改变layui时间控件不显示秒

    laydate time list gt li last child display none width 0 laydate time list gt li not last child width 50 layui laydate ma
  • Win7系统安装哪个版本的Chrome浏览器

    Win系统安装Chrome浏览器 Win7系统环境 安装Chrome应该尽量考虑2021年发布的浏览器版本 理由如下 Win7版Chrome 续命 到2022年 延长支持6个月 Win7版Chrome 续命 到2022年 90版本Chrom
  • starting switch Root:systemd [1]: Failed to execute /bin/sh, giving up : No such file or directory

    启动centos 卡在starting switch Root starting switch Root systemd 1 Failed to execute bin sh giving up No such file or direct
  • LeetCode第二章链表

    203 移除链表元素 题目链接 203 移除链表元素 给你一个链表的头节点 head 和一个整数 val 请你删除链表中所有满足 Node val val 的节点 并返回 新的头节点 示例 1 输入 head 1 2 6 3 4 5 6 v
  • C++初始化参数列表(类的组合)

    A 类的组合 定义 类的组合就是以另一个的对象为数据成员 注意 要优先使用组合而不是继承 组合表达式的含义一部分的关系 类的组合案例分析 1 类组合包含的类的对象 必须采用初始化参数列表方式调用各自类当中的构造函数去初始化 2 要通过包含的