c++查漏补缺(1)

news/2024/11/24 8:32:10/

目录

1.explicit关键字

2.static关键字

3.友元函数


1.explicit关键字

exeplicit关键字是在构造函数要使用的关键字。可以防止“隐式构造”,例如:

#include<iostream>using namespace std;class Date
{
public:explicit Date(int year, int month=1, int day=1):_year(year),_month(month),_day(day){}Date& operator=(const Date& date){//防止自身拷贝if (this != &date){_year = date._day;_month = date._month;_day = date._day;}return *this;}
private:int _year;int _month;int _day;
};int main()
{Date d1 = 2022;return 0;
}

本来,编译器会根据2022隐式构造一个Date,然后拷贝构造,加上explicit就可以防止这种情况。

加上explicit关键字可以保证书写规范。 


2.static关键字

静态成员放在静态区,所有对象共享。

静态成员必须类外进行定义,类内只能作为声明。

静态成员函数没有this指针,只能访问静态成员。


3.友元函数

问题:如何在一个类中实现<<的重载?

如果直接operator重写<<,我们会发现隐藏的this会占据第一个参数的位置。

导致我们就算完成也只能写出a<<cout之类的代码。

友元函数就是一个普通函数,不同的就是通过在类内进行的声明,可以直接使用类内的私有成员。

看看代码测试和结果吧:

#include<iostream>using namespace std;class Date
{//友元关键字friendfriend ostream& operator<<(ostream& _cout, const Date& date);
public:Date(int year, int month=1, int day=1):_year(year),_month(month),_day(day){}
private:int _year;int _month;int _day;
};//友元函数需要在类外定义
ostream& operator << (ostream& _cout, const Date& date)
{_cout << date._year << "-" << date._month << "-" << date._day;return _cout;
}
int main()
{Date d1(2023,8,26);cout << d1;return 0;
}

 


http://www.ppmy.cn/news/1067129.html

相关文章

③matlab向量和矩阵

目录 手动输入数组 创建等间距向量 数组创建函数 手动输入数组 1.背景 单个称为标量的数值实际上是一个 11 数组&#xff0c;也即它包含 1 行 1 列。 任务 创建一个名为 x 并且值为 4 的变量。 2.您可以使用方括号创建包含多个元素的数组。 x [3 5] x 3 5 任务 …

AIGC时代开启!拓世数字人短视频点燃企业数字化转型热潮!

短视频在近年迎来了高速发展期&#xff0c;与初期满足人们的娱乐需求和社交需求相比&#xff0c;短视频平台如今已经成长为一个巨量信息汇聚、流转、辐散的综合性场所。特别是随着移动互联网的普及&#xff0c;碎片化信息传播需求的迅猛增长&#xff0c;各行各业的内容创作者都…

postgresql 内核源码分析 btree索引的增删查代码基本原理流程分析,索引膨胀的原因在这里

B-Tree索引代码流程分析 ​专栏内容&#xff1a; postgresql内核源码分析手写数据库toadb并发编程 ​开源贡献&#xff1a; toadb开源库 个人主页&#xff1a;我的主页 管理社区&#xff1a;开源数据库 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&…

oppo手机怎么录屏?录制屏幕,就看这里!

“有人知道oppo手机怎么录屏吗&#xff0c;前几年买的oppo手机&#xff0c;用到现在感觉挺流畅的&#xff0c;也不是很卡顿&#xff0c;最近听说我这个型号的手机也有录屏功能&#xff0c;但是我不知道怎么打开&#xff0c;就想问问大伙&#xff0c;oppo手机怎么录屏呀。” 在…

水库大坝北斗RTK位移自动监测系统方案

一、方案背景 我国已拥有水库大坝9.8万余座&#xff0c;其中95%以上为土石坝&#xff0c;95%以上是上个世纪80年代以前建设的老坝。虽然近10年来我国进行了大规模的病险水库除险加固&#xff0c;但水库大坝数量多&#xff0c;土石坝多&#xff0c;出险的几率非常高。大坝作为一…

java反射获取对象的方法

invoke() 方法是 Java 反射机制中一个重要的方法&#xff0c;用于调用已获取的反射对象&#xff08;如 Method、Constructor&#xff09;代表的方法或构造函数。 通过 invoke() 方法可以在运行时动态地调用指定对象的方法或创建对象实例。它接受两个参数&#xff1a;第一个参数…

【VMware】CentOS 设置静态IP(Windows 宿主机)

文章目录 1. 更改网络适配器设置2. 配置虚拟网络编辑器3. 修改 CentOS 网络配置文件4. ping 测试结果 宿主机&#xff1a;Win11 22H2 虚拟机&#xff1a;CentOS-Stream-9-20230612.0 (Minimal) 1. 更改网络适配器设置 Win R&#xff1a;control 打开控制面板 依次点击&#x…

IPD流程中,CDCP评审的内容、评审标准和评审要素

在IPD&#xff08;Integrated Product Development&#xff09;流程中&#xff0c;CDCP&#xff08;Critical Decision Checkpoint&#xff09;决策评审是一个重要的里程碑评审&#xff0c;用于评估项目在关键决策点上的可行性和风险&#xff0c;以决定是否继续项目的下一阶段。…