每日学习记录02:(C++)构造函数,代理构造函数和析构函数

news2024/11/19 15:26:56

每日学习记录02:(C++)构造函数,代理构造函数和析构函数

个人学习笔记,如有错误,请指正

构造函数

构造函数是一种特殊的成员函数,它在创建类的新对象时被调用,用于初始化对象的成员变量。构造函数的名称与类名完全相同,并且没有返回类型。构造函数可以重载版本。如果在类中没有显式定义构造函数,编译器会提供一个默认的无参构造函数。

#include <iostream>
#include <vector>
#include <string>
// 学生类
class Student {
private:
    std::string name {"None"};
    int id {0};
    std::vector<int> scores;

public:
    // 构造函数
    Student(std::string n, int i);
    // 构造函数的重载
    Student(std::string n);
}
// 构造函数
Student:: Student(std::string n, int i) : name(n), id(i) {
    std::cout << "已创建学生:"<< n << ",id为:"<< id <<std::endl;
}
// 代理构造函数
void Student::addScore(int score) {
        this->scores.push_back(score);
}
int main(){
    Student stu1{"luke",103};
    return 0;
}

代理构造函数

代理构造函数是 C++11 引入的一个特性,它允许一个构造函数委托其部分或全部的初始化工作给同一个类中的另一个构造函数。

// 代理构造函数
void Student::addScore(int score) {
        this->scores.push_back(score);
}

}
int main(){
    Student stu1{"luke",103};
    Student stu2{"murphy"};

    return 0;
}

拷贝构造函数

用已有的类对象去赋值新的对象,将源对象的属性拷贝并复制给新的对象,至于这个拷贝是浅拷贝还是深拷贝,就看你的拷贝构造函数里面是怎末写的了。

// 拷贝构造函数:根据已存在对象的属性来更新新对象的属性(name,balance)
Student:: Student(const Student &source) : name {source.name}, id {source.id} {
}

}
int main(){
    Student stu1{"luke",103};
    Student stu2{"murphy"};
    Student stu3{stu1};
    return 0;
}

析构函数

析构函数是类的一种特殊成员函数,用于在对象生命周期结束时执行清理操作,如释放动态分配的内存、关闭文件等。析构函数的名称与类名相同,但前面加了波浪号(~)作为前缀。析构函数没有参数,也没有返回值。当对象超出作用域、被显式删除或程序结束时,析构函数会自动调用.

如果没有提供析构函数,编译器会自己提供一个默认的析构函数。建议自己写析构函数,因为编译器默认的是直接释放,如果当多个对象的某个指针成员共同指向了某一个地址,直接释放后,再次释放就会报错

完整代码

#include <iostream>
#include <vector>
#include <string>
// 学生类
class Student {
private:
    std::string name {"None"};
    int id {0};
    std::vector<int> scores;

public:
    // 构造函数
    Student(std::string n, int i);
    // 构造函数的重载
    Student(std::string n);
    // 添加成绩
    void addScore(int score);
    // 计算平均成绩
    double calculateAverageScore();
    // 获取学生姓名
    std::string getName();
};
Student:: Student(std::string n) : Student(n,0){
}


Student:: Student(std::string n, int i) : name(n), id(i) {
    std::cout << "已创建学生:"<< n << ",id为:"<< id <<std::endl;
}

// 拷贝构造函数:根据已存在对象的属性来更新新对象的属性(name,balance)
Student:: Student(const Student &source) : name {source.name}, id {source.id} {
}

void Student::addScore(int score) {
        this->scores.push_back(score);

}
double Student::calculateAverageScore() {
    int sum = 0;
    for (int score : this->scores) {
        sum += score;
    }
    return static_cast<double>(sum) / this->scores.size();

}
std::string Student::getName() {
    return this->name;
}

int main(){
    Student stu1{"luke",103};
    Student stu2{"murphy"};
    Student stu3{stu1};

    return 0;
}

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

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

相关文章

【ASR技术】WhisperX安装使用

介绍 WhisperX 是一个开源的自动语音识别&#xff08;ASR&#xff09;项目&#xff0c;由 m-bain 开发。该项目基于 OpenAI 的 Whisper 模型&#xff0c;通过引入批量推理、强制音素对齐和语音活动检测等技术。提供快速自动语音识别&#xff08;large-v2 为 70 倍实时&#xf…

STM32CUBEIDE FreeRTOS操作教程(九):eventgroup事件标志组

STM32CUBEIDE FreeRTOS操作教程&#xff08;九&#xff09;&#xff1a;eventgroup事件标志组 STM32CUBE开发环境集成了STM32 HAL库进行FreeRTOS配置和开发的组件&#xff0c;不需要用户自己进行FreeRTOS的移植。这里介绍最简化的用户操作类应用教程。以STM32F401RCT6开发板为…

力扣(leetcode)题目总结——动态规划篇

leetcode 经典题分类 链表数组字符串哈希表二分法双指针滑动窗口递归/回溯动态规划二叉树辅助栈 本系列专栏&#xff1a;点击进入 leetcode题目分类 关注走一波 前言&#xff1a;本系列文章初衷是为了按类别整理出力扣&#xff08;leetcode&#xff09;最经典题目&#xff0c…

计算器的实现

计算器的实现 计算器实现思路 我们⽇常写的计算表达式都是中缀表达式&#xff0c;也就是运算符在中间&#xff0c;运算数在两边&#xff0c;但是直接读取⽆ 法⻢上进⾏运算因为⼀个计算表达式还涉及运算符优先级问题。如&#xff1a; 都⽆法运算&#xff0c;因为后⾯还有括号优…

Python蓝桥杯刷题1

1.确定字符串是否包含唯一字符 题解&#xff1a;调用count函数计算每一个字符出现的次数&#xff0c;如果不等于1就输出no&#xff0c;并且结束循环&#xff0c;如果等于1就一直循环直到计算到最后一个字符&#xff0c;若最后一个字符也满足条件&#xff0c;则输出yes import…

《基于 PySpark 的电影推荐系统分析及问题解决》

以下是一篇关于上述代码的博客文章&#xff1a; 基于PySpark的电影推荐系统实现与分析 在当今数字化时代&#xff0c;个性化推荐系统在各个领域中都发挥着至关重要的作用&#xff0c;尤其是在娱乐行业&#xff0c;如电影推荐。本文将详细介绍如何使用PySpark构建一个简单的电…

每天五分钟深度学习pytorch:批归一化全连接网络完成手写字体识别

本文重点 前面我们学习了普通的全连接神经网络,后面我们学习了带有激活层的全连接神经网络,本文我们继续进一步升级,我们学习带有批归一化的全连接神经网络,批归一化可以加快神经网络的训练速度,减少过拟合,具体它的原理,大家可以看我们的《每天五分钟深度学习》专栏,…

JavaWeb后端开发知识储备1

目录 1.DTO/VO/PO 2.MVC架构/微服务架构 3.JWT令牌流程 4.ThreadLocal 5.接口路径/路径参数 6.自定义注解 1.DTO/VO/PO 1.1 DTO DTO 即 Data Transfer Object—— 数据传输对象&#xff0c;是用于传输数据的对象&#xff0c;通常在服务层与表现层之间传递数据&#xff…

什么是SMARC?模块电脑(核心板)规范标准简介三

1. 概念 SMARC&#xff08;Smart Mobility ARChitecture&#xff0c;智能移动架构&#xff09;是一种通用的小型计算机模块定义&#xff0c;基于ARM和X86技术的模块化计算机低功耗嵌入式架构平台&#xff0c;旨在满足低功耗、低成本和高性能的应用需求。这些模块通常使用与平板…

Filebeat升级秘籍:解锁日志收集新境界

文章目录 一、什么是filebeat二、Filebeat的工作原理2.1 filebeat的构成2.1.1 Prospector 组件2.1.2 Harvester 组件 2.2 filebeat如何保存文件的状态2.3 filebeat何如保证至少一次数据消费 三、Filebeat配置文件四、filebeat对比fluented五、Filebeat的部署安装5.1裸金属安装5…

C++小白实习日记——Day 4 将本地项目上传到gitee

生活就像一坨狗屎 我跑的代码老板说耗时太长了&#xff0c;不知道要怎么做才能耗时小一点 老板把我加到企业gitee里了&#xff0c;让我将代码上传到个人仓库&#xff1a; 新建一个文件夹当做库文件&#xff0c;点git bash here——> git init——>git config --global…

qiankun主应用(vue2+element-ui)子应用(vue3+element-plus)不同版本element框架css样式相互影响的问题

背景&#xff1a;qiankun微前端架构实现多应用集成 主应用框架&#xff1a;vue2 & element-ui 子应用框架&#xff1a;vue3 & element-plus >> 问题现象和分析 登录页面是主应用的&#xff0c;在登录之后才能打开子应用的菜单页面&#xff0c;即加载子应用。 首…

云渲染,解决houdini特效缓存太大上传太慢的问题

对于从事 Houdini 创作的艺术家和设计师们来说&#xff0c;使用云渲染的朋友&#xff0c;缓存太大导致云渲染上传慢一直是一个令人头疼的问题。然而&#xff0c;现在有了成都渲染 101 云渲染&#xff0c;这个难题迎刃而解。Houdini 以其强大的功能能够创建极为复杂和逼真的特效…

前端开发迈向全栈之路:规划与技能

一、前端开发与全栈开发的差异 前端开发主要负责构建和实现网页、Web 应用程序和移动应用的用户界面。其工作重点在于网页设计和布局&#xff0c;使用 HTML 和 CSS 技术定义页面的结构、样式和布局&#xff0c;同时运用前端框架和库如 React、Angular 或 Vue.js 等构建交互式和…

学习QT第二天

QT6示例运行 运行一个Widgets程序运行一个QT Quick示例 工作太忙了&#xff0c;难得抽空学点东西。-_-||| 博客中有错误的地方&#xff0c;请各位道友及时指正&#xff0c;感谢&#xff01; 运行一个Widgets程序 在QT Creator的欢迎界面中&#xff0c;点击左侧的示例&#xf…

删除课表中课程

文章目录 概要整体架构流程技术细节小结 概要 业务分析 删除课表中的课程有两种场景&#xff1a; 用户直接删除已失效的课程 用户退款后触发课表自动删除 技术细节 退款通知 其中用户退款与用户报名课程类似&#xff0c;都是基于MQ通知的方式。具体代码是在tj-trade模块的…

MySQL深度剖析-索引原理由浅入深

什么是索引&#xff1f; 官方上面说索引是帮助MySQL高效获取数据的数据结构&#xff0c;通俗点的说&#xff0c;数据库索引好比是一本书的目录&#xff0c;可以直接根据页码找到对应的内容&#xff0c;目的就是为了加快数据库的查询速度。 索引是对数据库表中一列或多列的值进…

MATLAB常见数学运算函数

MATLAB中含有许多有用的函数,可以随时调用。 a b s abs abs函数 a b s abs abs函数在MATLAB中可以求绝对值,也可以求复数的模长:c e i l ceil ceil函数 向正无穷四舍五入(如果有小数,就向正方向进一)f l o o r floor floor函数 向负无穷四舍五入(如果有小数,就向负方向…

如何使用本地大模型做数据分析

工具&#xff1a;interpreter --local 样本数据&#xff1a; 1、启动分析工具 2、显示数据文件内容 输入&#xff1a; 显示/Users/wxl/work/example_label.csv 输出&#xff1a;(每次输出的结果可能会不一样&#xff09; 3、相关性分析 输入&#xff1a; 分析客户类型与成…