C++ ——构造函数
1、作用:创建对象时,给对象的属性进行初始化
2、特点
(1)构造函数与类同名
(2)如果没有显式给出构造函数,编译器会给出默认的构造函数(参数为空,并且函数体也为空);如果给出任意的构造函数,系统默认的构造函数就不存在了
(3)有返回值,但是不写返回值类型,也不可以写void
(4)构造函数是在创建对象时自动调用
3、构造函数支持函数重载
4、构造函数也支持函数默认值
1、无参构造函数
编译器默认的构造函数:
类名(){}
#include <iostream>using namespace std;class Phone{private:string brand; //品牌string color; //颜色double price; //价格public:void play_music() {cout<<"播放音乐"<<endl;}void play_video(){cout<<"播放视频"<<endl;}//无参构造函数Phone(){cout<<"构造函数"<<endl;}};int main(){//无参构造函数Phone p1;return 0;}
2、有参构造函数
#include <iostream>using namespace std;class Phone{private:string brand; //品牌string color; //颜色double price; //价格public:void play_music() {cout<<"播放音乐"<<endl;}void play_video(){cout<<"播放视频"<<endl;}//有参构造函数Phone(string a,string b,double c=2995){brand=a;color=b;price=c;}};int main(){//有参构造函数(栈内存对象)Phone p2("vivo","红",9);//有参构造函数(堆内存对象)Phone*p3=new Phone("oppo","蓝",4);delete p3;p3=NULL;return 0;}
3、构造初始化列表
构造初始化列表:就是构造函数的一种简便写法
注意:构造初始化列表与构造函数不能同时出现
#include <iostream>using namespace std;class Person{private:int id;string name;string sex;bool flag;public://构造初始化列表Person(int id,string name,string sex,bool flag):id(id),name(name),sex(sex),flag(flag){}void show(){cout<<id<<name<<sex<<endl;}};int main(){Person p1(1001,"张三","男",true);p1.show();return 0;}
4、拷贝构造函数
作用:用于实现对象的拷贝创建
特点:
(1)拷贝构造函数与构造函数构成重载(拷贝构造函数也是与类同名)
(2)如果不给出拷贝构造函数,编译器会给出默认的拷贝构造函数,完成对象之间的值复制;如果给出拷贝构造函数,编译器就不会提供默认的拷贝构造函数
(3)拷贝构造函数的参数类型是对象的引用或者是const修饰的对象的引用
(4)拷贝构造函数是在拷贝创建对象时自动调用
注意:对象之间是相互独立的,对象之间的属性也是相互独立的
4.1 浅拷贝
编译器默认给出的拷贝构造函数,完成的就是浅拷贝,会完成对象之间简单的值复制
#include <iostream>using namespace std;class Person{private:int id;string name;string sex;bool flag;public://构造初始化列表Person(int id,string name,string sex,bool flag):id(id),name(name),sex(sex),flag(flag){}//编译器给出的默认的拷贝构造函数(手写出来的)----->浅拷贝Person(const Person&p){id=p.id;name=p.name;sex=p.sex;flag=p.flag;}void show(){cout<<id<<name<<sex<<endl;}};int main(){Person p1(1001,"张三","男",true); //调用有参的构造函数p1.show();// //方法一:// Person&pp=p1;// Person p2(pp);//方法二:Person p2(p1); //调用拷贝构造函数p2.show();return 0;}
默认拷贝构造函数存在安全隐患:如果成员变量是指针类型,两个对象的指针类型属性指向同一个内存空间,破坏了对象的独立性,那么这种拷贝叫浅拷贝
解决方法:使用深拷贝
4.2 深拷贝
实现方式:创建对象时,指针属性要有自己独立的区域;拷贝对象时,由地址拷贝变成内容拷贝
#include <iostream>#include <string.h>using namespace std;class Animal{private:string kind; //种类double weight; //体重char*hobby; //爱好public://构造函数---->深拷贝Animal(string k,double w,char*h){kind=k;weight=w;//创建对象时,指针属性要有自己独立的区域hobby=new char[20];strcpy(hobby,h); //使用strcpy前,需要引入string.h头文件}//展示信息void show(){cout<<"种类:"<<kind<<",体重:"<<weight<<",爱好:"<<hobby<<endl;}//kind读接口string get_kind(){return kind;}//拷贝构造函数---->深拷贝Animal(const Animal&c){kind=c.kind;weight=c.weight;//拷贝对象时,由地址拷贝变成内容拷贝hobby=new char[20];strcpy(hobby,c.hobby);}};int main(){char h[20]="eat fish";Animal cat1("小猫",12,h); //调用有参构造函数cat1.show();Animal cat2(cat1); //调用拷贝构造函数cat2.show();return 0;}
4.3 隐式调用构造函数
截止到目前,对于构造函数的调用都是显式调用
隐式调用构造函数的出现情况:
(1)等号赋值时,等号左侧是对象类型,等号右边恰好是对象构造函数所需要的参数类型,这时就会把右侧值传入到构造函数中,相当于隐式调用构造函数
#include <iostream>using namespace std;class Test{private:int number;public:Test(int number):number(number){}int get_number(){return number;}};int main(){// Test t1(100); //显示调用构造函数// cout<<t1.get_number()<<endl;// Test*t2=new Test(8); //显示调用构造函数// cout<<t2->get_number()<<endl;// delete t2;// t2=NULL;// Test t3(t1); //显示调用构造函数// cout<<t3.get_number()<<endl;Test t4=9; //隐式调用构造函数cout<<t4.get_number()<<endl;Test t5=t4; //隐式调用构造函数cout<<t5.get_number()<<endl;return 0;}
(2)隐式调用构造函数,一般在程序员不自知的情况下产生的,需要规避掉,可以用explicit关键字屏蔽
class Test{private:int number;public:explicit Test(int number):number(number){}int get_number(){return number;}};
相关文章:
C++ ——构造函数
1、作用:创建对象时,给对象的属性进行初始化 2、特点 (1)构造函数与类同名 (2)如果没有显式给出构造函数,编译器会给出默认的构造函数(参数为空,并且函数体也为空&#…...
Python实现语音识别详细教程【2025】最新教程
文章目录 前言一、环境搭建1. 下载 Python2. 安装 Python3 使用 pip 安装必要的库 二、使用 SpeechRecognition 库进行语音识别1.识别本地音频文件2.实时语音识别3. 使用其他语音识别引擎 注意事项 前言 以下是一份较为完整的 Python 语音识别教程,涵盖环境搭建、使…...
【第12章:深度学习与伦理、隐私—12.4 深度学习与伦理、隐私领域的未来挑战与应对策略】
凌晨三点的自动驾驶测试场,AI系统突然在暴雨中做出惊人决策——它选择撞向隔离带而不是紧急变道,因为算法推演发现隔离带后的应急车道站着五个工程师。这个惊悚的伦理困境,揭开了深度学习伦理危机最尖锐的冰山一角。 一、潘多拉魔盒已开:深度学习伦理的四大原罪 1.1 数据原…...
Django中数据库迁移命令
在 Django 中,数据库迁移是确保数据库结构与 Django 模型定义保持一致的重要过程。以下是 Django 中常用的数据库迁移命令: 1. python manage.py makemigrations 功能:此命令用于根据 Django 项目的模型文件(models.pyÿ…...
Win11 远程 连接 Ubuntu20.04(局域网)
Win11 远程 连接 Ubuntu20.04(局域网) 0. Ubuntu 开启共享1. Ubuntu系统中安装RDP服务器2.windows中连接使用方式1:远程桌面连接(winr: mstsc)方式2:mobaXterm 3 问题远程连接后出现黑屏 参考文献: 0. Ubuntu 开启共享 在ubunt设置中&#x…...
安卓手游内存call综合工具/内部call/安卓注入call/数据分析(类人猿学院)
进程分析注入综合工具总界面 模块分析函数分析遍历 函数分析 so汇编分析 汇编call植入器,支持模拟器x86 x64 和手机arm64指令全平台 防ce搜索数据功能 全国首套发布,阿凡老师学院最好的安卓内存逆向老师,几乎行业最强的,有兴趣可以…...
PPT工具集
PPT模版 免费下载 爱PPT优品PPTPPT之家第一PPTOfficePlus部分免费 AI生成PPT Kimi秘塔搜索 可以输入内容生成PPT大纲。...
SpringBoot:使用spring-boot-test对web应用做单元测试时如何测试Filter?
对SpringBoot的Web应用做单元测试时,一般会使用spring-boot-test,pom.xml中会添加如下内容: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><…...
解锁 Java 回调函数:异步编程与事件处理的利器
什么是 Java 回调函数 在 Java 中,回调函数是一种编程模式,允许将一个方法作为参数传递给另一个方法,当某个特定事件发生或某个任务完成时,调用该方法。回调机制可以使代码更加灵活和可扩展,因为它允许在运行时动态地…...
记PasteSpider部署工具的Windows.IIS版本开发过程之草稿-Web.IIS.Administration解读(5)
本文是记录PasteSpider的Windows.IIS开发过程, 在应用开发中,结果很重要,但是开发过程中遇到的问题和思考绝对是更有意义的事情! 经历过不同的需求后,你会发觉案例项目还真的只是案例项目,和实际项目天差地别!!! PasteSpider是开发者专属部署工具, 新版本的支持Windo…...
MySQL Workbench安装教程以及菜单汉化
WorkBench的下载 直接给下载MySql WorkBench的链接,直接进入正题:MySQL :: Download MySQL Workbenchhttps://dev.mysql.com/downloads/workbench/进入了下载界面: (安装路径自己看着办,注意安装路径不能有中文&#…...
【ISO 14229-1:2023 UDS诊断全量测试用例清单系列:第十节】
ISO 14229-1:2023 UDS诊断服务测试用例全解析(ClearDiagnosticInformation0x14服务) 作者:车端域控测试工程师 更新日期:2025年02月13日 关键词:UDS协议、0x14服务、DTC清除、ISO 14229-1:2023、ECU测试 一、服务功能…...
Python的imutils库详细介绍
imutils 是一个专为简化OpenCV(计算机视觉库)常见操作而设计的Python工具库,提供了一系列便捷函数,使图像和视频处理更加高效和简洁。以下是对其功能、安装及用法的详细介绍: 1. 安装方法 通过pip安装: p…...
常用查找算法整理(顺序查找、二分查找、插值查找、斐波那契查找、哈希查找、二叉排序树查找、平衡二叉树查找、红黑树查找、B树和B+树查找、分块查找)
常用的查找算法: 顺序查找:最简单的查找算法,适用于无序或数据量小的情况,逐个元素比较查找目标值。二分查找:要求数据有序,通过不断比较中间元素与目标值,将查找范围缩小一半,效率…...
2526考研资料分享 百度网盘
通过网盘分享的文件:01、2026【考研数学】 链接:https://pan.baidu.com/s/1PwMzp_yCYqjBqa7492mP3w?pwd98wg 提取码:98wg--来自百度网盘超级会员v3的分享 通过网盘分享的文件:01、2026【考研政治】 链接:https://pan.baidu.com/s/1PwMzp_yCYqjBqa7492…...
网络编程(24)——实现带参数的http-get请求
文章目录 二十四、day241. char 转为16进制2. 16进制转为 char3. URL 编码函数4. URL 解码函数5. 实现 get 请求参数的解析6. 测试 二十四、day24 我们在前文通过beast实现了http服务器的简单搭建,但是有很多问题我们并没有解决。 在前文中,我们的 get…...
东方财富股吧发帖与评论爬虫
东方财富股吧发帖与评论爬虫 东方财富股吧爬虫 写在开头项目介绍主要功能文件介绍爬取逻辑 a. 爬取帖子信息b. 爬取评论信息 使用步骤 1. 下载代码2. MongoDB 安装3. Webdriver 安装4. 运行 main.py5. 查看数据 踩过的坑附录(运行结果) 东方财富股吧爬…...
【Elasticsearch】match_bool_prefix查询
match_bool_prefix查询是 Elasticsearch 中一种用于全文搜索的查询方式,适用于需要同时匹配多个词汇,但词汇顺序不固定的情况,它结合了布尔查询(bool)和前缀查询(prefix)的功能,适用…...
微信小程序image组件mode属性详解
今天学习微信小程序开发的image组件,mode属性的属性值不少,一开始有点整不明白。后来从网上下载了一张图片,把每个属性都试验了一番,总算明白了。现总结归纳如下: 1.使用scaleToFill。这是mode的默认值,sc…...
数据结构:最小生成树
1.基本概念 生成树:连通无向图的生成树是包含图中所有顶点的极小连通子图(无环)。 最小生成树:所有生成树中边权重总和最小的那棵。 2.常用算法 克鲁斯卡尔算法(Kruskal) 步骤: 将所有边按权…...
专业级AI音频处理实践指南:OpenVINO插件在Audacity中的本地化创新应用
专业级AI音频处理实践指南:OpenVINO插件在Audacity中的本地化创新应用 【免费下载链接】openvino-plugins-ai-audacity A set of AI-enabled effects, generators, and analyzers for Audacity. 项目地址: https://gitcode.com/gh_mirrors/op/openvino-plugins-ai…...
V-Pretraining:价值导向的预训练模型优化方法
1. 项目背景与核心价值在机器学习领域,预训练模型已经成为当前技术发展的重要方向。传统的预训练方法主要关注模型在目标任务上的表现,而忽视了模型在实际应用中的价值取向。这种训练方式可能导致模型在复杂场景下产生不符合预期的行为,甚至引…...
Python开发者如何快速接入Taotoken并调用OpenAI兼容接口
Python开发者如何快速接入Taotoken并调用OpenAI兼容接口 1. 准备工作 在开始编写代码之前,需要确保已经完成以下准备工作。首先注册Taotoken账号并登录控制台,在「API密钥」页面创建一个新的API Key。建议为开发环境单独创建密钥,便于后续的…...
如何让老旧电视盒子变身4K媒体中心:从零开始的CoreELEC系统构建指南
如何让老旧电视盒子变身4K媒体中心:从零开始的CoreELEC系统构建指南 【免费下载链接】e900v22c-CoreELEC Build CoreELEC for Skyworth e900v22c 项目地址: https://gitcode.com/gh_mirrors/e9/e900v22c-CoreELEC 你是否有一台闲置的电视盒子,想要…...
2026年工地无塔供水压力罐批发厂家,这些靠谱之选你知道吗?
2026 年,在工地建设中,无塔供水压力罐的稳定运行至关重要。河南飞龙圣无塔供水设备有限公司作为行业老牌企业,有着丰富的经验,能为大家解决诸多供水难题。很多工地在使用无塔供水压力罐时,会遇到各种问题。比如水压不稳…...
MacBook外接显示器必看:2K屏开启HiDPI的底层原理与手动配置指南
MacBook外接2K显示器HiDPI配置全解析:从原理到实战 为什么你的2K显示器在Mac上总是不清晰? 每次把2K显示器接到MacBook上,总有种说不出的别扭感——要么文字小得需要眯眼,要么放大后模糊得像隔了层毛玻璃。这背后的原因࿰…...
C++20终极指南:std::make_shared对数组的完整支持解析
C20终极指南:std::make_shared对数组的完整支持解析 【免费下载链接】modern-cpp-features A cheatsheet of modern C language and library features. 项目地址: https://gitcode.com/gh_mirrors/mo/modern-cpp-features C20标准为开发者带来了众多实用特性…...
AI智能体编排平台d3vsh0p:从需求到代码的自动化软件开发实践
1. 项目概述:一个由AI驱动的自主软件开发平台 如果你和我一样,经历过无数次从零开始构建一个软件项目的繁琐过程——写需求文档、设计架构、编码、测试、调试,再到最后的部署和维护——你可能会想,有没有一种方式能让这个过程更自…...
使用 Taotoken 后如何通过用量看板清晰掌握 API 成本
使用 Taotoken 后如何通过用量看板清晰掌握 API 成本 1. 用量看板的核心功能 Taotoken 控制台提供的用量看板是成本管理的核心工具。登录后,用户可在「用量分析」页面查看实时和历史 token 消耗数据。系统默认按日聚合数据,支持切换至小时级或周维度观…...
绿色协同发展新路径:同道联盟八周年江西点亮推动生态资源共享体系建设
绿色协同发展新路径:同道联盟八周年江西点亮推动生态资源共享体系建设在绿色发展理念持续深化的背景下,同道联盟八周年庆典点亮活动在江西举行。本次活动聚焦生态资源共享与协同发展,展现联盟在推动绿色协同方面的积极探索。活动当晚…...
