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

news2025/1/10 21:32:06

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

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

学习集:

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

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


目录:
1. 问题引入
2. 类类型成员(自定义数据类型)的初始化与构造函数
3. 类的两种定义方式
- - 3.1 内联式定义
- - 3.2 成员函数声明定义分离式定义【推荐】
4. 类中成员变量的命名建议
5. 简单对比C++中类与结构体的区别
6. 相关文章推荐


【 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++ 类的基本成员函数:构造函数基本的定义与调用 |(无参构造与有参构造及缺省参数式构造)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/602446.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

科技云报道:数字化时代,企业终端安全防护该“上新”了!

科技云报道原创。 随着云计算、大数据、物联网等创新技术的加速落地&#xff0c;企业原有的网络边界被打破&#xff0c;各种终端设备如&#xff1a;笔记本电脑、台式机、平板电脑、智能手机、物联网终端等成为了新的安全边界。 在此背景下&#xff0c;想确保企业高效办公的灵活…

罗德与施瓦茨FSWP26相位噪声分析仪

罗德与施瓦茨FSWP26 相位噪声分析仪和VCO测试仪 FSWP相位噪声分析仪和VCO测试仪结合极低噪声内源和互相关技术&#xff0c;实现了相位噪声测量的超高灵敏度。因此&#xff0c;即便测量高度稳定的源 (例如在雷达应用中的源) 也只需几秒钟。脉冲信号测量、附加相位噪声 (包括脉冲…

【敲敲云】免费的零代码产品 — 应用用户角色与权限

之前的文章我们介绍了应用创建与设置&#xff0c;应用的使用离不开权限设置&#xff0c;毕竟不是每个人都可以查看所有的工作表&#xff0c;下面我们再来看一下应用的角色与权限。 一、应用用户 应用用户&#xff1a; 结合应用角色&#xff0c;可设置哪些用户可以访问哪些应用或…

Numpy---ndarray的特点、效率

1. Numpy Numpy&#xff08;Numerical Python&#xff09;是一个开源的 Python 科学计算库&#xff0c;用于快速处理任意维度的数组。 Numpy 支持常见的数组和矩阵操作。对于同样的数值计算任务&#xff0c;使用 Numpy 比直接使用 Python 要简洁的多。 Numpy 使用 ndarray 对…

Redis五大数据结构的底层实现

一)String类型:可以使用object encoding name就可以查看字符串的编码 SDS&#xff0c;flags的值不同&#xff0c;那么len和alloc所表示的值的数据范围也不同&#xff0c;所以flags的只是为了标识SDS头的总大小&#xff1b; alloc和len刚开始进行申请内存空间的时候都是相同的 S…

Vue.js 中的父子组件通信方式

Vue.js 中的父子组件通信方式 在 Vue.js 中&#xff0c;组件是构建应用程序的基本单元。当我们在应用程序中使用组件时&#xff0c;组件之间的通信是非常重要的。在 Vue.js 中&#xff0c;父子组件通信是最常见的组件通信方式之一。在本文中&#xff0c;我们将讨论 Vue.js 中的…

原神3.2服务端PC端架设教程

安装教程 安装 MongoDB&#xff0c;不会安装建议使用宝塔面板 sudo apt updatesudo apt install mongodb-orgsudo systemctl enable --now mongod 直接启动.如果失败看看数据库启动了没有.端口一致 ./start.sh 安装配置JDK17 双击 OpenJDK17U-jdk_x64_windows_hotspot_1…

4年经验,面试二十多家公司后的整理....

先说一下自己的个人情况&#xff0c;普通二本计算机专业毕业&#xff0c;懂python&#xff0c;会写脚本&#xff0c;会selenium&#xff0c;会性能&#xff0c;然而离职后到今天都没有收到一份offer&#xff01;一直在待业中&#xff0c;从离职第一天就开始准备简历&#xff0c…

【Proteus仿真】【51单片机】智能婴儿车

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真51单片机控制器&#xff0c;使用LCD1604显示模块、按键模块、LED和蜂鸣器、DHT11温湿度、DS18B20温度传感器、SR04超声波&#xff0c;声音传感器、L298N直流电机、语音蓝牙控制等。…

搭建属于你自己的New Bing

前言 在这篇博客中&#xff0c;您将学习如何使用 Render 部署 go-proxy-bingai 项目&#xff0c;以便在不需要登录的情况下体验微软 Bing AI 的所有功能。 作者GitHub项目地址&#xff1a;adams549659584/go-proxy-bingai: 用 Vue3 和 Go 搭建的微软 New Bing 演示站点&#x…

工业场景中的RFID技术应用有哪些?

您是否好奇于如何在工业场景中利用RFID技术实现更高效的操作和生产流程优化&#xff1f;本文将带您深入探索RFID技术在工业领域的应用&#xff0c;揭示其优势和挑战&#xff0c;并通过实际案例为您呈现RFID技术在工业自动化和生产流程优化方面的成功应用。 一、RFID技术在工业…

OpenWrt 软路由解析公网IPV6域名访问家庭NAS的问题答疑

1、非要使用 Padavan 或者 OpenWrt固件的软路由才能IPV6公网访问吗&#xff1f; 答&#xff1a;这个并不是这样的&#xff0c;一般家用路由器都无法放行防火墙规则&#xff0c;这种情况当然无法实现IPV6公网访问&#xff0c;但是少部分路由器是可以的&#xff0c;只要有防火墙设…

MySQL6-深入理解MVCC和BufferPool缓存机制

❤️ 个人主页&#xff1a;程序员句号 &#x1f680; 支持水滴&#xff1a;点赞&#x1f44d; 收藏⭐ 留言&#x1f4ac;关注 &#x1f338; 订阅专栏&#xff1a;MySQL性能调优 原创博文、基础知识点讲解、有一定指导意义的中高级实践文章。 认真或有趣的技术分享。 MySQL性…

Vue.js 中的路由是什么?如何使用路由?

Vue.js 中的路由是什么&#xff1f;如何使用路由&#xff1f; 在 Vue.js 中&#xff0c;路由是指为不同的 URL 地址提供不同的页面内容或视图的机制。Vue.js 中的路由可以使用 Vue Router 库来实现&#xff0c;它是 Vue.js 官方提供的路由管理库。 Vue Router 简介 Vue Route…

vue (8)

vue8 文章目录 1. 浏览器本地存储1.1 localStorage1.2 sessionStorage1.3 总结 2. 修改 TodoList 案例3. 绑定自定义事件3.1 绑定3.2 解绑3.3 两个注意点3.4 总结3.5 修改 TodoList 案例 4. 全局事件总线4.1 总结4.2 修改 TodoList 案例 1. 浏览器本地存储 1.1 localStorage 图…

【MySQL数据库】项目中用到的一些SQL查询总结

文章目录 前言1. 有A&#xff0c;B两张表&#xff0c;需要统计A表中某个属性值的总数&#xff0c;更新到B表中实现代码 2. 将三张&#xff08;或n张&#xff09;表中的结果合并一起实现代码 3. 删除题库中的所有试题信息实现代码 4. 统计同一张表中&#xff0c;不同属性的数量于…

C语言-typedef关键字

一.typedef 关键字 typedef是在C语言允许为一个数据类型起一个新的别名。它本身是一种存储类的关键字,与auto extern,mutable、static、register 等关键字不能出现在同一个表达式中。 二、typedef用法 示例&#xff1a; 对于数据类型使用例如&#xff1a; 对于指针的使用例如…

【VictoriaMetrics】VictoriaMetrics单机版批量和单条数据写入(influx格式)

VictoriaMetrics单机版支持以influx格式的数据写入,写入支持单条数据写入以及多条数据写入,下面操作演示下如何使用 1、首先需要启动VictoriaMetrics单机版服务 启动VictoriaMetrics单机版服务执行的命令如下 nohup /opt/victoriaMetrics/victoria-metrics-prod -httpListe…

【剑指offer专项突破版】整数篇(经典面试题)——C

文章目录 前言一. 整数除法题目分析1.一般思路①代码 2.优化思路②优化后的代码 拓展:用位运算实现整数的加法③代码 二. 二进制加法题目分析思路分析①代码 三. 前n个数字中1的个数题目描述思路分析①方法1——遍历②方法2——i&(i-1)③方法3——i&(i-1)的优化④方法…

数字赋农:数字农业新时代,致富之路宽又阔!

不管在什么年代&#xff0c;粮食永远是国之根本、民之命脉&#xff0c;而来粮食安全更是“国之大者”&#xff0c;更是曾在大会中明确提出过&#xff0c;要全方位夯实粮食安全根基&#xff0c;牢牢守住十八亿耕地红线&#xff0c;确保中国人的饭碗牢牢端在自己手中。 我们需要深…