本系列 C++ 相关文章 仅为笔者学习笔记记录,用自己的理解记录学习!C++ 学习系列将分为三个阶段:基础篇、STL 篇、高阶数据结构与算法篇,相关重点内容如下:

  1. 基础篇类与对象(涉及C++的三大特性等);
  2. STL 篇学习使用 C++ 提供的 STL 相关库
  3. 高阶数据结构与算法篇手动实现自己的 STL 库设计实现高阶数据结构,如 B树、B+树、红黑树等。

学习集:

  • C++ 入门到入土!!!学习合集
  • Linux 从命令到网络再到内核!学习合集

本期内容:C++ 类的基本成员函数:类类型成员与构造函数问题


前期内容: C++ 学习 ::【基础篇:12】:C++ 类的基本成员函数:构造函数基本的定义与调用 |(无参构造与有参构造及缺省参数式构造)


目录:
1. 问题引入
2. 类类型成员(自定义数据类型)的初始化与构造函数
3. 相关文章推荐


【 C++学习合集链接 】


1. 问题引入

已知:如果类中没有显式定义构造函数,则C++编译器会自动生成一个无参的默认构造函数,一旦用户显式定义编译器将不再生成。


优缺问题引出:

  • C++ 中,参数可分为:基本数据类型(int、double、(任意类型指针)…)和 自定义数据类型(struct、class、…)
  • C++ 对,这两种参数在自动生成无参构造时是不同的!!!
    • 对于基本数据类型,不做处理!
    • 对于自定义数据类型回去调用自定义数据类型的:默认构造函数!

【 以下示例为使用两个栈实现队列示例的构造函数探讨! 】

代码示例
#include<iostream>
using std::cout;
using std::endl;typedef int DataType;/* 定义一个栈的及其构造函数 */
class Stack {
public:Stack(int capacity = 4) {       // 结合参数缺省实现:只要实例化必定是可用的栈(空间为:4)_capacity = capacity;_array = (DataType*)malloc(sizeof(DataType) * capacity);  // 申请存储空间if (_array == nullptr) {perror("malloc fail!\n");return;}_size = 0;}
private:DataType* _array;           // 顺序存储方式int _capacity;         // 记录当前栈的最大存储量int _size;                // 记录当前栈中的元素个数
};class Queue {
private:Stack _st1;Stack _st2;
};int main() {Stack stk;Queue queue;return 0;
}


2. 类类型成员(自定义数据类型)的初始化与构造函数

由上示例代码可知:对于自定义数据类型会去调用自定义数据类型的构造函数!


这是 C++ 早期设计的一个缺陷:即对于C++的两种类型使用了两种原则进行处理!


C++ 11:后官方给出了一个补丁 / 解决方案:即自定义数据类型在成员变量的声明是可以赋默认值!【注意点:赋值不是在初始化,而是在指定缺省值!【给定缺省值实际是给构造函数的初始化列表处进行定义】】(代码如下!)

#include<iostream>
using std::cout;
using std::endl;typedef int DataType;/* 定义一个栈的及其构造函数 */
class Stack {                   /* 不自定义构造函数 */
public:
private:DataType* _array;           int _capacity = 4;         // 不是初始化,而是相当于指定缺省值int _size = 0;               // 不是初始化,而是相当于指定缺省值
};class Queue {
private:Stack _st1;Stack _st2;
};int main() {Stack stk;Queue queue;return 0;
}


3. 相关文章推荐

1. C++ 学习 ::【基础篇:12】:C++ 类的基本成员函数:构造函数基本的定义与调用 |(无参构造与有参构造及缺省参数式构造)

C++ 学习 ::【基础篇:13】:C++ 类的基本成员函数:类类型成员的初始化与构造函数问题相关推荐

  1. shell学习-基础篇

    shell学习-基础篇 Linux? 挺好的! shell是基础- 最近利用闲暇时间在 http://c.biancheng.net/ 网站上学习了shell基础篇,整理成博客以加深理解 文章目录 L ...

  2. 强化学习基础篇(五):Dyna-Q 算法

    强化学习基础篇(五):Dyna-Q 算法 (Dynamic Programming) 1. 简介 2. Dyna-Q 3. Dyna-Q 代码实践 4. 小结 文章转于 伯禹学习平台-动手学强化学习 ...

  3. numpy学习——基础篇

    numpy学习--基础篇 日期:2021/4/20 作者:就叫易易好了 什么是numpy库? numpy的全名为Numeric python,是Python语言的一个扩充程序库,支持高级大量的维度数组 ...

  4. 深度学习基础篇(一)

    深度学习基础篇(一) Part I 深度学习基础 本书1-4章将带你了解一些基本概念:什么是深度学习,它可以用来做什么以及它如何工作.此外,熟悉使用深度学习解决数据问题的典型工作流程.如果还没怎么了解 ...

  5. python传递参数格式_Python语言学习基础篇之Python发送Post请求之根据参数位置传参、数据类型、不同方式传参...

    本文主要介绍了Python语言学习基础篇之Python发送Post请求之根据参数位置传参.数据类型.不同方式传参,通过具体的内容向大家展现,希望对大家Python语言的学习有所帮助. 目录 一.验证 ...

  6. 回溯法采用的搜索策略_强化学习基础篇(三十四)基于模拟的搜索算法

    强化学习基础篇(三十四)基于模拟的搜索算法 上一篇Dyna算法是基于真实经验数据和模拟经验数据来解决马尔科夫决策过程的问题.本篇将结合前向搜索和采样法,构建更加高效的搜索规划算法,即基于模拟的搜索算法 ...

  7. LINUX学习基础篇(六)帮助命令

    LINUX学习基础篇(六)帮助命令 帮助命令 man(Manual) info help - -help 帮助命令 man(Manual) 作用:查看联机帮助手册. 执行权限:所有用户. man命令的 ...

  8. LINUX学习基础篇(十二)痕迹命令

    LINUX学习基础篇(十二)痕迹命令 系统痕迹命令 w命令 who命令 last命令 lastlog命令 lastb命令 系统痕迹命令 系统中有一些重要的痕迹日志文件,如/var/log/wtmp./ ...

  9. LINUX学习基础篇(十五)软件包管理

    LINUX学习基础篇(十五)软件包管理 软件包管理 软件包分类 源码包 二进制包 选择 依赖性 rpm包安装 rpm包命名规则 rpm包安装和卸载 服务命令 rpm查询命令 验证 数字证书 rpm中文 ...

  10. 深度学习基础篇【5】从0开始搭建YOLOV5 并进行测试

    深度学习基础篇[5] 从0开始搭建 YOLOV5  并进行测试 如何评价YOLO V5,那就必须拿"上一代"YOLO V4来做对照了.先说结论,YOLO V5 在性能上稍弱于YOL ...

最新文章

  1. 基于python的数据挖掘网课-利用 Python 练习数据挖掘
  2. python os模块详细用法
  3. C++Miller Rabin算法的实现(附完整源码)
  4. 【机器视觉】 dev_get_system算子
  5. 音视频技术开发周刊 | 140
  6. NYOJ-14 会场安排问题(经典贪心,区间完全不覆盖模板)
  7. Springboot2.x +JPA 集成 Apache ShardingSphere 同库分表
  8. android 按钮控制线程,关于手机安卓-线程测试
  9. 【2016年第2期】大数据时代下中国社会调查的科学新观
  10. 黑莓发布自动驾驶安全管家软件Jarvis
  11. Eclipse调试时Application XXX is waiting for the debugger to attach的提示
  12. AD属性对照表 LDAP
  13. 北京44岁程序员失业,感叹:编程估计没戏了,想去卖煎饼果子点背锅走人~
  14. python json函数_Json概述以及python对json的相关操作
  15. 浏览器兼容性及调试插件
  16. 电脑键盘部分按键失灵_笔记本键盘失灵怎么办,电脑键盘失灵-中关村在线
  17. SparkStreaming性能调优
  18. springboot 整合 邮件发送
  19. Android 8.1 DisplayPowerController(四) 自动调节亮度(1)——流程
  20. 一位小程序代理商亲自见证小程序在外卖行业的突破

热门文章

  1. springboot+jsp学生综合素质测评系统
  2. 跟散仙学shell命令(六)
  3. Lucene4.10使用教程(六):Lucene的过滤器
  4. 【每日论文阅读】Collaborative Visual Inertial SLAM for Multiple Smart Phones
  5. Terraform云平台实例操作神器
  6. 腾讯微云免费领取一个月会员
  7. ubuntu安装pinfi及其实操记录
  8. 微信缓存dat怎么转图片_电脑微信怎么把dat转图片?可以看我分享
  9. python绘制证券市场线(SML)
  10. Wireshark中无法显示网卡列表的解决方法