当前位置: 首页 > news >正文

初识C++ 类和对象

本次编译环境为VS2022

文章目录

  • 前言
    • 1.拷贝构造函数
    • 2.赋值运算符重载
      • 一.运算符重载
      • 二.赋值运算符重载
  • 总结

前言

在了解完类和对象中的 构造和析构函数后 我们开始了解类和对象的后续内容
拷贝构造函数 赋值运算符重载

1.拷贝构造函数

拷贝构造函数 顾名思义 是构造函数的一种 拷贝构造函数的的第一个参数 是自身类型的引用且 其他参数都有默认值
拷贝构造函数的特点:
1.它是构造函数的一个重载
2.它的第一个参数必须是自身类型的引用 不是的话 编译器会直接报错 且后面的参数得有缺省值
3.C++规定⾃定义类型对象进⾏拷⻉⾏为必须调⽤拷⻉构造。
4.若未显式定义拷⻉构造,编译器会⽣成⾃动⽣成拷⻉构造函数。
5.传值返回会产⽣⼀个临时对象调⽤拷⻉构造,传值引⽤返回,返回的是返回对象的别名(引⽤),没有产⽣拷⻉。

#define_CRT_SECURE_NO_WARNINGS1#include<iostream>usingnamespacestd;classDate{public:Date(intyear=1,intmonth=1,intday=1){_year=year;_month=month;_day=day;}Date(constDate&d)//拷贝构造{_year=d._year;_month=d._month;_day=d._day;}Date(Date*d)//指针类型的{_year=d->_year;_month=d->_month;_day=d->_day;}voidPrint(){cout<<_year<<"-"<<_month<<"-"<<_day<<endl;}private:int_year;int_month;int_day;};voidFunc1(Date d){cout<<&d<<endl;d.Print();}Date&Func2(){Datetmp(2026,7,5);tmp.Print();returntmp;}intmain(){Dated1(2026,7,5);Func1(d1);cout<<&d1<<endl;Dated2(&d1);d1.Print();d2.Print();Dated3(d1);d2.Print();Date d4=d1;d2.Print();Date ret=Func2();ret.Print();return0;}


通过简单的代码给各位一个简单拷贝构造函数的 日期类
可以看到 其也就相当于是初始化函数 只不过 其参数不同 有&符号

2.赋值运算符重载

一.运算符重载

运算符重载是具有特殊名字的函数,它的名字是由operator和后面要定义的运算符共同构成的 它有返回类型 和参数列表以及函数体
如果⼀个重载运算符函数是成员函数,则它的第⼀个运算对象默认传给隐式的this指针,因此运算符重载作为成员函数时,参数⽐运算对象少⼀个。
通过简单的代码来了解`

classDate{public:Date(intyear=1,intmonth=1,intday=1){_year=year;_month=month;_day=day;}voidPrint(){cout<<_year<<"-"<<_month<<"-"<<_day<<endl;}//private:int_year;int_month;int_day;};//若没有在类里面//掉private 则 赋值运算符重载 访问呢不了 _year等booloperator==(constDate&d1,constDate&d2){returnd1._year==d2._year&&d1._month==d2._month&&d1._day==d2._day;}intmain(){Dated1(2026,1,29);Dated2(2026,1,30);intret=operator==(d1,d2);cout<<ret<<endl;return0;}

这里我们看到我们通过创建类 并且用 operator == 来展示运算符号重载
最终 ret = 0;

二.赋值运算符重载

1.赋值运算符重载是⼀个运算符重载,**规定必须重载为成员函数。**赋值运算重载的参数建议写成const 当前类类型引⽤,否则会传值传参会有拷⻉
2. 有返回值,且建议写成当前类类型引⽤,引⽤返回可以提⾼效率,有返回值⽬的是为了⽀持连续赋值场景。
3. 没有显式实现时,编译器会⾃动⽣成⼀个默认赋值运算符重载,默认赋值运算符重载⾏为跟默认拷⻉构造函数类似,对内置类型成员变量会完成值拷⻉/浅拷⻉(⼀个字节⼀个字节的拷⻉),对⾃定义类型成员变量会调⽤他的赋值重载函数。
4. 像Date这样的类成员变量全是内置类型且没有指向什么资源,编译器⾃动⽣成的赋值运算符重载就可以完成需要的拷⻉,所以不需要我们显⽰实现赋值运算符重载。像Stack这样的类,虽然也都是内置类型,但是_a指向了资源,编译器⾃动⽣成的赋值运算符重载完成的值拷⻉/浅拷⻉不符合我们的需求,所以需要我们⾃⼰实现深拷⻉(对指向的资源也进⾏拷⻉)。像MyQueue这样的类型内部主要是⾃定义类型Stack成员,编译器⾃动⽣成的赋值运算符重载会调⽤Stack的赋值运算符重载,
也不需要我们显⽰实现MyQueue的赋值运算符重载。这⾥还有⼀个⼩技巧,如果⼀个类显⽰实现了析构并释放资源,那么他就需要显⽰写赋值运算符重载,否则就不需要。
我们通过一个简单函数来实现

classDate{public:Date(intyear=1,intmonth=1,intday=1){_year=year;_month=month;_day=day;}Date(constDate&d){cout<<"Date(const Date& d)"<<endl;_year=d._year;_month=d._month;_day=d._day;}Date&operator=(constDate&d){if(this!=&d){_year=d._year;_month=d._month;_day=d._day;}return*this;}voidPrint(){cout<<_year<<"-"<<_month<<"-"<<_day<<endl;}private:int_year;int_month;int_day;};intmain(){Dated1(2026,1,29);Dated2(d1);Dated3(2026,1,30);d1=d3;Date d4=d1;return0;}


这里我们通过代码来看 Date& 拷贝构造 + operator= 来实现的
不断的进行赋值

总结

我们今天就简单的了解一下这两个 类和对象的学习难度较大 希望各位 通过书籍和视频辅助理解
感谢各位

http://www.jsqmd.com/news/320011/

相关文章:

  • 基于FastAPI的完整RESTful API示例
  • AI 净界效果展示:RMBG-1.4 发丝级抠图惊艳呈现
  • 开源大模型企业级应用:Clawdbot+Qwen3-32B私有部署+Ollama网关一文详解
  • 从零搭建语义相似度系统|基于GTE镜像的全流程实践
  • Hunyuan-MT-7B部署教程:Kubernetes集群中Hunyuan-MT-7B服务编排
  • PowerPaint-V1修图神器:智能填充让照片完美无缺
  • 2026年温州职业装现货供应厂商选择指南与深度评测
  • BGE-Reranker-v2-m3显存不足?2GB低显存部署案例详解
  • 2026年知名的高粘度凸轮转子泵/食品级凸轮式转子泵厂家最新推荐
  • ClawdBot效果展示:Qwen3-4B-Instruct在复杂指令(如‘对比中英文合同第5条’)中的精准响应
  • 期刊绘图——三元图直观表现三变量关系
  • VibeVoice在视频配音中的应用:快速生成多语言解说词
  • ReactNative for Harmony 项目鸿蒙化三方库集成实战:react-native-safe-area-context
  • 亲测阿里通义Z-Image-Turbo镜像,商用AI作图系统快速搭建分享
  • DeerFlow技术指南:Python代码执行沙箱安全机制与调用示例
  • ReactNative for Harmony 项目鸿蒙化三方库集成实战:react-native-svg
  • 2026年比较好的环氧树脂输送转子泵/高粘度凸轮转子泵热门厂家推荐汇总
  • 2026年温州休闲鞋厂商综合实力评估报告(附六家推荐)
  • web大学生一体化服务平台信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】
  • cpolar实现远程协作,让Tldraw效率提高不止一倍
  • 20260129让天启AIO-3576Q38开发板跑原厂的Buildroot时适配xc7160【使用原厂DTS】
  • HN3401_P沟道-30V -4.2A场效应管MOSFET应用场景分析
  • 2026年评价高的管道浮筒/应急管道浮筒厂家推荐清单
  • 跨境电商多账号运营:从0搭建“账号中台”,让矩阵越做越轻
  • 20260129让天启AIO-3576Q38开发板在天启Buildroot下适配摄像头模块8ms1m使用4K录像+预览【第二版本/更新DTS】
  • Vercel 团队 10 年 React 性能优化经验:10 大核心策略让性能提升 300%
  • 自动解压文件完成csrf攻击删除数据
  • Clawdbot部署Qwen3:32B完整指南:GPU显存适配、Ollama集成与控制台实操
  • 跨境电商多账号运营的“人效打法”:小团队也能跑出矩阵的12个关键动作
  • 跨境电商多账号运营的“管控力”:把风险、效率、利润同时抓住的四张表