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源代码地址 后端代码:…...
企业如何选择一个开源「好」项目?
开源 三句半 需求明确是关键 风险考量要周全 开源虽好不白捡 别忘合规! 显然,开源已成为一股不可阻挡的洪流,企业拥抱开源,积极参与开源项目不仅是响应技术潮流的必然选择,更是实现自身技术创新、市场拓…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
