当前位置: 首页 > news >正文

温岭市住房和城乡建设规划局网站南宁营销型网站

温岭市住房和城乡建设规划局网站,南宁营销型网站,东莞网站制作公,网站首页效果图怎么做一、友元 友元&#xff08;friend&#xff09;是C中的一种特殊关系&#xff0c;用于在类之间共享访问权限。通过将一个函数或类声明为另一个类的友元&#xff0c;我们可以允许友元访问声明类的非公有成员。 二、友元函数 问题&#xff1a;现在尝试去重载operator<<&am…

一、友元

友元(friend)是C++中的一种特殊关系,用于在类之间共享访问权限。通过将一个函数或类声明为另一个类的友元,我们可以允许友元访问声明类的非公有成员。

二、友元函数

问题:现在尝试去重载operator<<,然后发现没办法将operator<<重载成成员函数。因为cout的
输出流对象和隐含的this指针在抢占第一个参数的位置。this指针默认是第一个参数也就是左操作
数了。但是实际使用中cout需要是第一个形参对象,才能正常使用。所以要将operator<<重载成
全局函数。但又会导致类外没办法访问成员,此时就需要友元来解决。
 

class Date
{
public:Date(int year, int month, int day): _year(year), _month(month), _day(day){}// d1 << cout; -> d1.operator<<(&d1, cout); 不符合常规调用
// 因为成员函数第一个参数一定是隐藏的this,所以d1必须放在<<的左侧ostream& operator<<(ostream& _cout){_cout << _year << "-" << _month << "-" << _day << endl;return _cout;}
private:int _year;int _month;int _day;
};

友元函数可以直接访问类的私有成员,它是定义在类外部的普通函数,不属于任何类,但需要在
类的内部声明,声明时需要加friend关键字。

class Date
{friend ostream& operator<<(ostream& _cout, const Date& d);friend istream& operator>>(istream& _cin, Date& d);
public:Date(int year = 1900, 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& d)
{_cout << d._year << "-" << d._month << "-" << d._day;return _cout;
}
istream& operator>>(istream& _cin, Date& d)
{_cin >> d._year;_cin >> d._month;_cin >> d._day;return _cin;
}
int main()
{Date d;cin >> d;cout << d << endl;return 0;
}

 

需要注意以下几点:

  1. 友元函数可访问类的私有和保护成员,但不是类的成员函数
  2. 友元函数不能用const修饰
  3. 友元函数可以在类定义的任何地方声明,不受类访问限定符限制
  4. 一个函数可以是多个类的友元函数
  5. 友元函数的调用与普通函数的调用原理相同

 

三、友元类 

【注意】:

  1. 友元类的所有成员函数都可以是另一个类的友元函数,都可以访问另一个类中的非公有成员。
  2. 友元关系不能传递
  3. 如果C是B的友元, B是A的友元,则不能说明C时A的友元。
  4. 友元关系不能继承
  5. 友元关系是单向的,不具有交换性。
class Time
{friend class Date; // 声明日期类为时间类的友元类,则在日期类中就直接访问Time类//中的私有成员变量
public:Time(int hour = 0, int minute = 0, int second = 0): _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;
};

http://www.yayakq.cn/news/911726/

相关文章:

  • 做网站的软件名字全拼惠州市建设局建工办网站
  • 如何建微信商城网站网站上的链接怎么做的
  • 平湖模板网站建设公司天元建设集团有限公司刘士龙
  • 建设银行校园招聘网站网站建设公司价格
  • 用c语言做公司网站wordpress做成网盘
  • 免费教做面食的网站长沙网页设计有哪些
  • 企业网站推广的名词解释如何建立自己音乐网站
  • 英文外贸网站 php源码网站基本设置
  • 百石网怎么做网站营口建设信息网站
  • wordpress小说站群网络营销方案包括哪些主要内容?
  • 四大门户网站排名网站建设教程软件下载
  • 陈木胜妻子嘉兴网站建设seo
  • 汕头网站快速排名提升在哪里可以学到做网站
  • wordpress单位内网做网站wordpress 网银支付
  • 上海大众汽车网站哪家公司做的wordpress 仪表盘界面
  • 深圳租房建设局网站首页网络营销推广的实施计划
  • 西安营销型网站制作价格徐水区城市建设网站
  • 网站怎么才能吸引人seo系统培训课程
  • 网站免费永久企业网站建设信息管理平台的立项目的
  • 网站建设套餐是什么意思室内设计相关网站
  • 订单网站模块动漫网页设计作品
  • 如何快速提升网站权重网站做互动
  • 福州网站设计大概多少钱怎样在公司的网站服务器上更新网站内容
  • 小说网站开发猪八戒外贸平台排行榜
  • 海口网站设计微信官方网站登陆
  • 天空人体网站怎么做建筑工程网上叫什么
  • 免费下载app软件的网站怎么把wordpress
  • 南昌做公司网站哪家好wordpress文章列表 框
  • 公众号网站怎么做的做网站页面怎么做
  • 国外网站需要备案免费个人简历