当前位置: 首页> 文旅> 文化 > 长春高新_牛企网络_百度推广费用可以退吗_成都进入搜索热度前五

长春高新_牛企网络_百度推广费用可以退吗_成都进入搜索热度前五

时间:2025/8/23 19:41:23来源:https://blog.csdn.net/weixin_55341642/article/details/144593388 浏览次数:0次
长春高新_牛企网络_百度推广费用可以退吗_成都进入搜索热度前五

目录

前言

重载流插入运算符函数

重载流提取运算符函数


前言

对于流插入和流提取运算符的讲解,还是利用日期类来辅助讲解

C++ ——— 完善日期类-CSDN博客


重载流插入运算符函数

对于内置类型,可以直接使用流插入进行打印

代码演示:

int i = 5;
double d = 2.3;cout << i << endl;
cout << d << endl;

代码验证:

cout 和 << 流插入能自动识别类型,并打印

其实自动识别的底层逻辑是编译器自带的运算符函数重载

那么对日期类是否能直接打印呢?

可以看出 cout 并不能自动识别出 d1 的类型,所以会报错

通过了解知道了:

cout 是 ostream 头文件里面的对象,所以可以自己写一个流插入的重载函数

代码演示:

void operator<<(ostream& out)
{out << _year << "年" << _month << "月" << _day << "日" << endl;
}

但是在使用的时候还是会报错,是因为在类中的成员函数,参数中有一个隐藏的 this 指针,且 this 指针默认是第一个参数,是不能改变的

所以导致了参数不匹配,那么只有反着调用才能成功调用

代码验证:

但是这样使用就会有不协调的感觉,就像是 cout 对象流向 d1 对象

所以不能写成成员函数,只能写成全局函数

代码演示:

void operator<<(ostream& out, Data& d)
{out << d._year << "年" << d._month << "月" << d._day << "日" << endl;
}

现在的参数匹配没有问题了,但是年月日是被访问限定符限定的,不能在类外面访问

这就要通过有元声明在类中声明以上函数,声明后才能正常使用

如何有元声明:

class Data
{// 有元声明friend void operator<<(ostream& out, Data& d);public:// 成员函数…………private:// 成员变量…………
};

代码验证:

可以看出,把类外函数在类中通过有元声明后,就能使用了

最后一个问题:

可能会出现连续流输入的情况

cout << d1 << d2;

那么以 void 形式返回就会出现问题,所以要更改返回值

且形参部分的日期类可以加上 const 修饰,因为只是打印,不会修改内容

代码演示:

ostream& operator<<(ostream& out, const Data& d)
{out << d._year << "年" << d._month << "月" << d._day << "日" << endl;return out;
}

代码验证:


重载流提取运算符函数

代码演示:

istream& operator>>(istream& in, Data& d)
{in >> d._year >> d._month >> d._day;return in;
}

逻辑和重载流插入运算符函数是一样的,这里就不需要 const 修饰了,因为会改变日期类的内容

代码验证:

关键字:长春高新_牛企网络_百度推广费用可以退吗_成都进入搜索热度前五

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: