3.C++:类与对象(下)
一、再谈构造函数
1.1构造函数体赋值
class Date
{
public:Date(int year, int month, int day){_year = year;_month = month;_day = day;}private:int _year;int _month;int _day;
} 1.2初始化列表
class Date
{
public:Date(int year, int month, int day): _year(year), _month(month), _day(day){}
private:int _year;int _month;int _day;
}; class A
{
public: A(int a):_a(a){}
private:int _a;
};
class B
{
public: //可以理解为初始化列表是对象的成员变量定义的地方B(int a, int ref):_aobj(a),_ref(ref),_n(10){}
private: //成员变量声明的地方A _aobj; // 没有默认构造函数(不用传参就可以调的那个构造函数)int& _ref; // 引用const int _n; // const
};
1.3成员变量在类中声明次序就是其在初始化列表中的初始化顺序,与其在初始化列表中的先后次序无关
class A
{
public:A(int a):_a1(a) //a赋值给_a1,_a2(_a1) //_a1赋值给_a2{}void Print() {cout<<_a1<<" "<<_a2<<endl;}
private:int _a2; //先声明_a2,再声明_a1int _a1;
};
int main()
{A aa(1); //先把_a1赋值给_a2,_a1还没有初始化,所以赋值给_a2的是随机值;接着1赋值给_a1aa.Print();
}
//输出:1 随机值
1.4隐式类型的转换 (explicit关键字 )
class Date
{
public:
//explicit Date(int year) 禁止隐式类型的转换Date(int year): _year(year){}
private:int _year;
};
int main()
{Date d1(1); //构造Date d2 = 2;//隐式类型的转换:构造出tmp(2)+再用tmp拷贝构造d2(tmp)+优化成直接构造//const Date& d2 = 2; 引用就是中间产生的临时对象Date d3 = d1; //拷贝构造return 0;
}
class Date
{
public:Date(int year, int month, int day): _year(year), _month(month), _day(day){}
private:int _year;int _month;int _day;
};
int main()
{Date d1(1,2,3);Date d2 = {1,2,3}; //隐式类型转换,C++11支持return 0;
} 二、 static成员
2.1概念
class A
{
public:
A() {++n;}A(const A& t) {++n;}static int GetACount(); //没有this指针,不使用对象就可以调用{ //a = 10;//err,不可访问任何非静态成员return n;}
private:int a;static int n; //属于这个类的所有对象,也属于这个类
};
int A::n= 0; //静态成员变量必须在类外进行定义
void Test()
{A a1, a2;A a3(a1);cout<<A::GetACount()<<endl; //不使用对象调用static函数
} 2.2特性
2.3问题
class A
{
public:
//1.静态成员函数可以调用非静态成员函数吗?
void f1(){}
static void f2()
{f1(); //err,没有this指针
}
//2. 非静态成员函数可以调用类的静态成员函数吗?
static void f3(){}
void f4()
{f1(); //可以,突破类域+访问限定符就可以访问。类里面是一个整体都在这个类域中,不受访问限定符影响
}
}; 三、C++11初始化新玩法
class Date
{
public:Date(){}
void print(){cout<<_year<<"-"<<_month<<"-"<<_day<<endl;}
private://C++11才支持,不是初始化,是声明时给缺省值int _year = 0;int _month= 1;int _day= 1;//static int n = 1; //err,静态成员必须类外面赋值
};
四、友元
4.1 友元函数
class Date
{friend void print(Date& d);//突破类的封装
public:Date(int year, int month, int day): _year(year), _month(month), _day(day){}
private:int _year;int _month;int _day;
};
void print(Date& d)
{cout << d._year << "-" << d._month << "-" << d._day << endl;
}
int main()
{Date d1(1,2,3);print(d1); //调用类外的函数
} 4.2 重载运算符<<
#include <iostream>
using namespace std;
class Date
{
public:Date(int year, int month, int day): _year(year), _month(month), _day(day){}void operator<<(ostream& _cout) //this指针占据第一位,无法改动{_cout << _year << "-" << _month << "-" << _day;}
private:int _year;int _month;int _day;
};
int main()
{Date d1(1,2,3);//cout << d1; //errd1 << cout; //d1.operator(cout);有效,但没有可读性
} class Date
{friend ostream& operator<<(ostream& _cout, Date& d);
public:Date(int year, int month, int day): _year(year), _month(month), _day(day){}
private:int _year;int _month;int _day;
};
ostream& operator<<(ostream& _cout,Date& d) //类外,改变d的位置
{_cout << d._year << "-" << d._month << "-" << d._day << endl;return _cout;
}
int main()
{Date d1(1,2,3);Date d2(4, 5, 6);cout << d1 << d2;
}
实现输入输出 :
class Date
{friend ostream& operator<<(ostream& _cout, const Date& d);friend istream& operator>>(istream& _cin, Date& d);
public:
private:int _year;int _month;int _day;
};
//输出
ostream& operator<<(ostream& _cout,const Date& d)
{_cout << d._year << "-" << d._month << "-" << d._day<<endl;return _cout;
}
//输入
istream& operator>>(istream& _cin, Date& d) //d中成员要改,不加const
{_cin >> d._year >> d._month >> d._day;return _cin;
}
int main()
{Date d1; //调用默认构造函数Date d2;cin >> d1 >> d2;cout << d1 << d2;
}
4.3友元类
class Date; // 前置声明
class Time
{friend class Date; // 声明日期类为时间类的友元类,则在日期类中就直接访问Time类中的私有成员变量
public:Time(int hour, int minute, int second): _hour(hour), _minute(minute), _second(second){}
private:int _hour;int _minute;int _second;
};class Date
{
public:Date(int year = 1900, int month = 1, int day = 1): _year(year), _month(month), _day(day){}void SetTimeOfDate(int hour, int minute, int second){// 直接访问时间类私有的成员变量_t._hour = hour;_t._minute = minute;_t._second = second;}
private:int _year;int _month;int _day;Time _t;
};
相关文章:
3.C++:类与对象(下)
一、再谈构造函数 1.1构造函数体赋值 在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。 class Date { public:Date(int year, int month, int day){_year year;_month month;_day day;}private:int _year;int _month;i…...
iOS开发之SwiftUI
iOS开发之SwiftUI 在iOS开发中SwiftUI与Objective-C和Swift不同,它采用了声明式语法,相对而言SwiftUI声明式语法简化了界面开发过程,减少了代码量。 由于SwiftUI是Apple推出的界面开发框架,从iOS13开始引入,Apple使用…...
2024-简单点-pandas
pandas pandas to numpy 尽量不用.values提取数据 numexpr 和 bottleneck加速 布尔操作 describe 自定义describe .pipe df.apply 行或者列级别函数级别应用...
面试笔记——Redis(双写一致、持久化)
双写一致 双写一致性: 当修改了数据库中的数据,也要更新缓存的数据,使缓存和数据库中的数据保持一致。 相关问题:使用Redis作为缓存,mysql的数据如何与Redis进行同步?——双写一致性问题 回答时࿰…...
【漏洞复现】科立讯通信指挥调度平台editemedia.php sql注入漏洞
漏洞描述 在20240318之前的福建科立讯通信指挥调度平台中发现了一个漏洞。该漏洞被归类为关键级别,影响文件/api/client/editemedia.php的未知部分。通过操纵参数number/enterprise_uuid可导致SQL注入。攻击可能会远程发起。 免责声明 技术文章仅供参考,任何个人和组织使…...
css的active事件在手机端不生效的解决方法
需求:需求就是实现点击图中的 “抽奖” 按钮,实现一个按钮Q弹的放大缩小动画 上面是实现的效果,pc端,点击触发 :active 问题:但是这种方式在模拟器上可以,真机H5一调试就没生效了,下面是简单…...
00. 认识 Java 语言与安装教程
认识 Java Java 在 20 多年发展过程中,与时俱进,为了适应时代的需要,经历过两次重大的版本升级,一个是 Java 5,它提供了泛型等重要的功能。另一个是提供了 Lambda 表达式等重要的功能的 Java 8。 一些重要的 Java 的…...
数据结构-栈-004
1链栈 1.1栈结点结构体定义 /*定义一个数据结构*/ typedef struct student {char name[32];char sex;int age; }DATA_TYPE;/*定义一个栈结点*/ typedef struct stack_node {DATA_TYPE data;//数据域struct stack_node *pnext;//指针域 }STACK_NODE;1.2栈顶结点结构体定义 /*…...
(第76天)XTTS 升级:11GR2 到 19C
参考文档: 11G - Reduce Transportable Tablespace Downtime using Cross Platform Incremental Backup (Doc ID 1389592.1)V4 使用跨平台增量备份减少可传输表空间的停机时间 (Doc ID 2940565.1)前言 XTTS(Cross Platform Transportable Tablespaces,跨平台迁移表空间)是…...
修改网站源码,给电子商城的商品添加图片时商品id为0的原因
修改网站源码,给电子商城的商品添加图片时商品id为0的原因。花了几个小时查找原因。后来,由于PictureControl.class.php是复制CourseControl.class.php而来,于是对比了这两个文件,在CourseControl.class.php找到了不一样的关键几条…...
ffmpeg开发异步AI推理Filter
ffmpeg开发异步AI推理Filter 1.环境搭建、推理服务及客户端SDK2.编译原版ffmpeg3.测试原版ffmpeg的filter功能4.准备异步推理filter5.修改点6.重新编译ffmpeg7.测试异步推理filter本文旨在阐述如何开发一个FFmpeg Filter,该模块利用gRPC异步通信机制调用远程视频处理服务。这一…...
python与excel第七节 拆分工作簿
一个工作簿中多个工作表拆分为多个工作簿 假设一个excle工作簿中有多个工作表,现在需要将每个工作表拆分为单独的工作簿。 例子: import xlwings as xw# 设置生成文件的路径path D:\\TEST\\dataIn# 源文件的路径workbook_name D:\\TEST\\dataIn\\产…...
JS08-DOM节点完整版
DOM节点 查找节点 父节点 <div class="father"><div class="son">儿子</div></div><script>let son = document.querySelector(.son)console.log(son.parentNode);son.parentNode.style.display = none</script>通过…...
【python】python3基础
文章目录 一、安装pycharm 二、输入输出输出 print()文件输出:格式化输出: 输入input注释 三、编码规范四、变量保留字变量 五、数据类型数字类型整数浮点数复数 字符串类型布尔类型序列结构序列属性列表list ,有序多维列表列表推导式 元组tu…...
计算机三级网络技术 选择+大题234笔记
上周停去准备计算机三级的考试啦,在考场上看到题目就知道这次稳了!只有一周的时间,背熟笔记,也能稳稳考过计算机三级网络技术!...
智能合约 之 ERC-721
ERC-721(Non-Fungible Token,NFT)标准 ERC-721是以太坊区块链上的一种代币标准,它定义了一种非同质化代币(Non-Fungible Token,NFT)的标准。NFT是一种加密数字资产,每个代币都具有独…...
== 和 equals 的区别是什么?
和 equals() 在 Java 中都是用于比较两个对象,但它们之间存在显著的差异: 比较的内容: :这是 Java 中的基本比较运算符,对于基本数据类型(如 int, char, double 等),它比较的是值&a…...
VUE:内置组件<Teleport>妙用
一、<Teleport>简介 <Teleport>能将其插槽内容渲染到 DOM 中的另一个位置。也就是移动这个dom。 我们可以这么使用它: 将class为boxB的盒子移动到class为boxA的容器中。 <Teleport to".boxA"><div class"boxB"></div> &…...
ruoyi-nbcio-plus后端里mapstruct-plus和lombok的使用
更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 http://122.227.135.243:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码:…...
企业如何选择一个开源「好」项目?
开源 三句半 需求明确是关键 风险考量要周全 开源虽好不白捡 别忘合规! 显然,开源已成为一股不可阻挡的洪流,企业拥抱开源,积极参与开源项目不仅是响应技术潮流的必然选择,更是实现自身技术创新、市场拓…...
重构缠论分析范式:四维动态识别引擎突破技术交易认知瓶颈
重构缠论分析范式:四维动态识别引擎突破技术交易认知瓶颈 【免费下载链接】Indicator 通达信缠论可视化分析插件 项目地址: https://gitcode.com/gh_mirrors/ind/Indicator 副标题:面向量化交易者的通达信可视化插件技术解析 揭示行业痛点&#…...
DownKyi:3分钟学会B站视频下载的终极免费方案
DownKyi:3分钟学会B站视频下载的终极免费方案 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等)。…...
新手福音:用快马生成centos8下载安装全流程可视化引导工具
今天想和大家分享一个特别适合Linux新手的实用工具——用InsCode(快马)平台快速生成CentOS 8下载安装引导程序。作为一个从Windows转Linux的过来人,我深知第一次面对系统安装时的茫然,这个工具能帮你把复杂流程变成可视化指引。 为什么需要这个工具 刚接…...
Cursor Pro功能优化工具:突破限制的技术方案与实践指南
Cursor Pro功能优化工具:突破限制的技术方案与实践指南 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your tr…...
用Python和PyTorch手把手搭建你的第一个脉冲神经网络(SNN)模型
用Python和PyTorch手把手搭建你的第一个脉冲神经网络(SNN)模型 当你第一次听说"脉冲神经网络"时,脑海中可能会浮现出科幻电影里那些会思考的机器。但事实上,这种模拟生物神经元工作方式的算法已经悄然走进现实。作为一名…...
Verilog基础:task和function的使用(一)
相关文章 Verilog基础专栏https://blog.csdn.net/weixin_45791458/category_12263729.html 一、前言 任务(task)和函数(function)即提供了从不同位置执行公共过程的能力(因为这样可以实现代码共享),也提供了把大过程分解成小过程的能力&…...
如何解决OpenHTMLtoPDF在容器化环境中的字体加载NullPointerException问题
如何解决OpenHTMLtoPDF在容器化环境中的字体加载NullPointerException问题 【免费下载链接】openhtmltopdf An HTML to PDF library for the JVM. Based on Flying Saucer and Apache PDF-BOX 2. With SVG image support. Now also with accessible PDF support (WCAG, Section…...
暗黑破坏神2存档编辑器终极指南:3步掌握可视化修改技巧
暗黑破坏神2存档编辑器终极指南:3步掌握可视化修改技巧 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 还在为暗黑破坏神2存档修改而烦恼吗?传统的十六进制编辑不仅操作复杂,还容易导致存档损…...
【2026 实测】10 分钟配好 OpenClaw 中转站:GPT、Claude、Gemini、DeepSeek 一键切换(小白可跟做)
你是不是也遇到过这些问题: 官方 API 偶发不稳定,任务跑到一半中断想切换模型时,要反复改配置、改 Key明明照着文档配了,结果还是 400/401 报错 如果你正在本地用 OpenClaw 做 AI 编程或多模型对比,这篇就是给你的。…...
栈(C语言)
目录 1. 栈的定义 2. 代码实现 1. 栈的定义 栈属于线性表,具有后进先出的特点,存储结构类似羽毛球桶,可以依次取出最后放入栈中的数据。实现:栈一般采用数组 / 链表实现,但是推荐程度:数组 > 单链表 …...
