前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >运算符重载使用它类对象作为参数

运算符重载使用它类对象作为参数

作者头像
我与梦想有个约会
发布2023-10-20 16:22:32
发布2023-10-20 16:22:32
14200
代码可运行
举报
文章被收录于专栏:jiajia_dengjiajia_deng
运行总次数:0
代码可运行

我们想实现一个功能,分别有两个类,一个名为 Sender,负责发送邮件。另外一个类名为 Mail,负责管理发送的标题和内容。在使用的时候,我们需要让类 Sender 重载 << 操作符,以实现将 Mail 类的数据发送出去,大致用法就是 Sender << Mail 这样的方式。这就涉及到了诸多问题。

1、运算符重载函数要写在哪个类中? 发送数据的格式为 Sender << Mail,很明显相当于 Sender.operator<<(Mail) 这样的操作,所以运算符重载函数要写到 Sender 类中。 2、Sender 要使用 Mail 类对象作为参数,需要访问 Mail 类中的私有成员怎么办? 此时友元就发挥了作用,我们需要将 Sender 类中的运算符重载函数在 Mail 类中声明为友元函数,这样 Sender 类才能正常访问 Mail 类的私有成员。这个问题类似我们之前介绍过的“类A的成员函数做类B的友元函数”。 具体实现的代码如下:

代码语言:javascript
代码运行次数:0
运行
复制
#include 
#include 
using namespace std;
// 前向声明 Mail
class Mail;
class Sender
{
public:
Sender(string addr)
:_addr(addr){}
// 操作符重载函数,返回 Sender 引用是为了连续的 << 操作
Sender& operator<<(Mail& mail);
private:
string _addr;
};
class Mail
{
public:
Mail(string title, string content)
:_title(title), _content(content){}
// 声明友元函数的时候要加域,否则他找不到是哪个 operator
friend Sender& Sender::operator<<(Mail& mail);
private:
string _title;
string _content;
};
// Mail 类后面实现,防止访问不到类成员的情况
Sender& Sender::operator<<(Mail& mail)
{
cout << “To      : “ << _addr << endl;
cout << “Title   : “ << mail._title << endl;
cout << “Content : “ << mail._content << endl;
// 返回 *this 是为了连续 << 操作
return *this;
}
int main(int argc, char* argv[])
{
Sender sender(“3086417@qq.com“);
Mail mail(“节假日请你吃饭”, “周末我们去外婆家吃老干妈吧。”);
Mail mail2(“你的QQ申诉邮件”, “你的QQ申诉失败了!!”);
sender << mail << mail2;
return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-05-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档