类对象与初始化列表

2023-11-07

在类中定义的数据成员一般都是基本的数据类型。 但是类中的成员也可以是对象,叫做对象成员。 C++中对对象的初始化是非常重要的操作, 当创建一个对象的时候, c++编译器必须确保调用了所有子对象的构造函数。 如果所有的子对象有默认构造函数, 编译器可以自动调用他们。 但是如果子对象没有默认的构造函数, 或者想指定调用某个构造函数怎么办? 那么是否可以在类的构造函数直接调用子类的属性完成初始化呢? 但是如果子类的成员属性是私有的, 我们是没有办法访问并完成初始化的。 解决办法非常简单: 对于子类调用构造函数, c++为此提供了专门的语法, 即构造函数初始化列表。 当调用构造函数时, 首先按各对象成员在类定义中的顺序(和参数列表的顺序无关) 依次调用它们的构造函数, 对这些对象初始化, 最后再调用本身的函数体。也就是说, 先调用对象成员的构造函数, 再调用本身的构造函数。 析构函数和构造函数调用顺序相反, 先构造, 后析构。

num.h

#pragma once
class Num
{
private:
	int n;
public:
	Num();
	Num(int n);
	~Num();
};

num.cpp

#include "num.h"
#include <iostream>

using namespace std;

Num::Num()
{
	this->n = 0;
	cout << "num无参构造" << endl;
}

Num::Num(int n)
{
	this->n = n;
	cout << "num有参构造" << endl;
}

Num::~Num()
{
	cout << "num析构函数" << endl;
}

data.h

#pragma once

#include "num.h"
class Data
{
private:
	Num n;
	int a;
public:
	Data();
	Data(int n, int a);
	~Data();
};

data.cpp
 

#include "data.h"
#include <iostream>

using namespace std;

Data::Data():n(0),a(0)
{
	//this->n = 0;
	//this->a = 0;
	cout << "data无参构造" << endl;
}

Data::Data(int n, int a):n(n),a(a)  // 通过初始化列表,调用Num的有参构造:如:Num n(3)
{
	//this->n = n;
	//this->a = a;
	cout << "data有参构造" << endl;
}

Data::~Data()
{
	cout << "data析构函数" << endl;
}

main.cpp

#include <iostream>
#include "data.h"
#include "num.h"

using namespace std;

int main()
{
	Data data(4, 3);

}

运行结果:

 

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

类对象与初始化列表 的相关文章

随机推荐

  • FLOYD算法

    1 定义概览 Floyd Warshall算法 Floyd Warshall algorithm 是解决任意两点间的最短路径的一种算法 可以正确处理有向图或负权的最短路径问题 同时也被用于计算有向图的传递闭包 Floyd Warshall算
  • 开启IIS,“出现错误,并非所有功能被成功更改”

    环境 Windows7 Ultimate 事件 测试需要 要在自己的计算机上搭建临时IIS 在打开或关闭windows功能里 开启了相关组件及功能 确定应用后提示 出现错误 并非所有功能被成功更改 解决 网上查阅相关资料后 众说纷纭 后来在
  • Java将一段逗号分割的字符串转换成一个数组(亲测)

    String 类 String 类代表字符串 Java 程序中的所有字符串字面值都作为此类的实例实现 字符串是常量 它们的值在创建之后不能更改 字符串缓冲区支持可变的字符串 因为 String 对象是不可变的 所以 可以共享 String
  • 关于命令行中不能运行pip程序和python程序

    大多数都是没有将pip程序和python程序下载的路径添加到环境变量 1 添加pip的环境变量 2 添加pythn的环境变量 小心不要添加成了python快捷方式的环境变量 我一开始就添加的是python快捷方式的变量 结果一直以为是添加的
  • checkbox的value和checked属性详解

    一 checked属性 checked属性代表的是当前checkbox是否被选中 如果选中返回true 未选中返回false 和value值无关 p p
  • hive环境配置

    记录一下hive环境 Mac m1 的配置过程 以防忘记 可能遇到的问题 1 安装hadoop 1 首先 安装hadoop brew install Hadoop arch x86 64 brew install Hadoop for M1
  • Pycharm安装教程

    个人简介 作者简介 大家好 我是W chuanqi 一个编程爱好者 个人主页 W chaunqi 支持我 点赞 收藏 留言 愿你我共勉 若身在泥潭 心也在泥潭 则满眼望去均是泥潭 若身在泥潭 而心系鲲鹏 则能见九万里天地 文章目录 Pych
  • python笔记10--pyinstaller打包源码

    python笔记10 pyinstaller打包源码 1 介绍 2 用法 3 常见问题 4 说明 1 介绍 本文主要介绍使用pyinstaller打包py脚本为可执行程序 后续会在此处续更其它复杂案例 2 用法 安装 由于当前主流使用py3
  • MES管理系统:实现两化融合的关键业务融合点

    随着中国经济的快速发展 两化融合已成为推动企业转型升级的重要手段 在这个过程中 MES作为面向生产级的管理系统 扮演着至关重要的角色 本文将探讨MES生产管理系统如何实现业务融合 并为企业带来丰厚的经济效益 首先 让我们回顾一下MES系统的
  • 面试官:你在xx项目中有哪些亮点或是贡献亦或是小技巧?

    前言 面试官 你在xx项目中有哪些亮点或是贡献亦或是小技巧 我 阿巴阿巴 卡 停一下 你是不是也有相同或者类似的经历 实际大部分同学们多数情况下都是在使用vue或react去实现业务代码 跟业务代码打交道比较多 每当面试官一问起 还真是说不
  • Qt removeOne函数解析

    如下 使用removeOne是否会导致空指针呢 include
  • Google Play 上架总结(二)Google账户关联详解

    近期 本人在 App 上架Google Play 过程中 频繁遇到账号被关联封禁 在踩过很多坑后 我觉得有必要总结一下 给其它朋友作为参考 一 Google 账户关联是指什么 账户关联是就是当Google开发者账号因为各种原因被封停了 此时
  • 从哈佛1000多页的课程名单里,我看到了何谓“大学”

    从哈佛1000多页的课程名单里 我看到了何谓 大学 2017 02 24 22 11 39 来源 齐鲁壹点 山东 举报 分享到 易信 微信 QQ空间 微博 原标题 从哈佛1000多页的课程名单里 我看到了何谓 大学 我相信 大学精神的本质
  • CUDA计算直方图(一)原子操作 atomicAdd

    参考 Shane Cook CUDA Programming A developer s guide to parallel computing with GPUs 目录 背景 使用CPU计算 使用CUDA 原子操作atomicAdd 背景
  • Centos7.9安装python的miniconda环境和配置conda镜像源

    1 Centos7 9安装miniconda Miniconda是一个 免费的 轻量级的 conda安装程序 conda是一个开源的包 环境管理器 能在同一个机器上安装不同Python版本的软件包及其依赖 以及在不同Python环境之间切换
  • win10中安装mysql5.7

    一 mysql5 7网盘下载 win32位win64位都可以用 链接 https pan baidu com s 1j3b1 jMu0FqFt1EZi9SqsQ 提取码 4dsk 二 解压 解压mysql 5 7 34 win32 zip文
  • matlab计算纹波电压,Zeta电路的参数计算及仿真

    Zeta电路的参数计算较为简单 可以用matlab来完成 代码如下 clear clc Vin 12 输入电压单位V Vout 18 输出电压单位V Fs 5000000 开关频率单位Hz Iout 1 输出电流单位A DeltaIin 0
  • 面试频率最高的JAVA问题

    请说说接口和抽象类的区别 估计90 的人都答不好 我的答案是 1 从使用目的来看 接口只是一个类间的协议 它并没有规定怎么去实现 抽象类可以重用你代码使你的代码更加简洁 2 从行为来看 接口可以多继承 multi implement 抽象类
  • 太晚睡觉等于自杀(献给年轻人)

    沉重的话题 一个97级的名校高才生 毕业后进入微软工作 上月死了 只不过25岁的黄金年龄 珍视自己的生命吧 大家 对自己好一点 对了 又听到一个悲伤的消息 广告界的好青年 又挂了一人了 此人是联旭的 是业务还是设计我也搞不清楚 前几天在连续
  • 类对象与初始化列表

    在类中定义的数据成员一般都是基本的数据类型 但是类中的成员也可以是对象 叫做对象成员 C 中对对象的初始化是非常重要的操作 当创建一个对象的时候 c 编译器必须确保调用了所有子对象的构造函数 如果所有的子对象有默认构造函数 编译器可以自动调