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

潍坊市城市建设官网站制作花灯

潍坊市城市建设官网站,制作花灯,wordpress msn,网站建设20推广类具有封装和信息隐藏的特性。只有类的成员函数才能访问类的私有成员,而其他函数是无法访问类的私有成员的。但有时这种限制太严格,不适合特定的编程问题。C提供另一种访问途径-友元。 友元有3种: 友元函数 友元成员函数 友元类 对于一个类而言,它的…

在这里插入图片描述

类具有封装和信息隐藏的特性。只有类的成员函数才能访问类的私有成员,而其他函数是无法访问类的私有成员的。但有时这种限制太严格,不适合特定的编程问题。C++提供另一种访问途径-友元。 友元有3种:

  • 友元函数

  • 友元成员函数

  • 友元类

对于一个类而言,它的友元虽然不是该类的成员函数,但是可以访问该类的私有成员。

2.1友元函数

它既可以是一个不属于任何类的普通函数,也可以是另外一个类的成员函数。将一个函数声明为一个类的友元函数后,它可以访问类的私有成员和保护成员。

1.普通函数作为友元函数

friend 返回值类型 函数名(参数表);

例:普通函数作为友元


class Date  //日期类
{
private:int year; //年int month;//月int day;//日
public:Date(int y, int m, int d) :year(y), month(m), day(d){}void show(){cout << year << "-" << month << "-" << day << endl;}//声明modifyDate是自己(Date类)的友元,可以访问自己的私有成员friend void modifyDate(Date& date, int year, int month, int day);
};//修改日期的函数,普通函数,不属于任何类
void modifyDate(Date& date, int year, int month, int day)
{   //是Date的友元函数,可以访问date的私有数据date.year = year;  date.month = month;date.day = day;
}int main()
{Date today{2023,8,28};today.show();modifyDate(today,2023,10,1);today.show();return 0;
}

说明:在类Date中声明函数modifyDate是自己的友元,那么在modifyDate这个函数中不仅可以访问date的公有成员,也可以访问date的私有成员(当然在这个示例中把该函数定义为类中的函数更好,这里仅仅是介绍友元函数)。

2.类的成员函数作为友元函数

另一个类的成员函数作为类的友元,格式为:

friend 返回值类型 类名::函数名(参数表);

例:计算给定的日期时间(包括日期和时间)是当年第几秒。

#include <iostream>
#include <string>
using namespace std;class Time; //类声明class Date//日期类
{
private:int year;int month;int day;
public:Date(int y, int m, int d) :year(y), month(m), day(d){}void Calcutetime(const Time &t);//统计当前日期时间(包括日期和时间)是当年第几秒
};class Time//时间类
{
//没有写访问权限,默认为privateint hour;int minute;int second;
public:Time(int h, int m, int s) :hour(h), minute(m), second(s){}friend void Date::Calcutetime(const Time& t); //友元函数
};//统计当前日期时间是当年第几秒
void Date::Calcutetime(const Time& t)
{int mon[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };int days = 0;     //天数int totaltime = 0;//秒数if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)//处理闰年mon[1] = 29; //闰年2月29天for (int i = 0; i < month - 1; i++)//把前面月份的天数相加days += mon[i];days += day - 1; //当天还没有过完,不能算,需-1//该函数是Time的友元函数,下面可以直接访问t的私有成员totaltime = ((days * 24 + t.hour) * 60 + t.minute) * 60 + t.second;cout << year << '-' << month << '-' << day << " ";cout << t.hour << ':' << t.minute << ':' << t.second << endl;cout << "上面的日期时间是当年的第: " << totaltime << " 秒" << endl;
}int main()
{Date date1(2023, 1, 1);Time time1(0, 0, 0);date1.Calcutetime(time1);Date date2(2023, 8, 24);Time time2(18, 04, 25);date2.Calcutetime(time2);return 0;
}

2.2友元类

如果希望A类中的所有成员函数都能够访问B类中所有私有和保护成员,可以将A类中的每个成员函数声明为B类的友元函数,但这样做显得比较烦琐。为此,C++提供了友元类,也就是一个类可以声明为另一个类的友元类。

若在B类中声明A类是其友元类,那么,A类中的任意成员函数都可以访问B类的所有成员。
声明友元类的语句格式为:

friend class 类名;

例:友元类应用。


//友元类
class Date //日期类
{
private:int year;int month;int day;
public:Date(int y, int m, int d) :year(y), month(m), day(d){}friend class DateFriend; //友元类,DateFriend是自己(Date类)的友元类
};class DateFriend
{
public:void modifyDate(Date& date, int year,int month, int day);//修改日期void show(const Date& date);//输出数据
};void DateFriend::modifyDate(Date& date, int year,int month, int day)
{//友元类,可以直接访问date的私有成员date.year = year;date.month = month;date.day = day;
}
void DateFriend::show(const Date& date)
{//友元类,可以直接访问date的私有成员cout << date.year << "-" << date.month << "-" << date.day << endl;
}int main()
{Date date(2023,8,28);DateFriend daf;daf.show(date);daf.modifyDate(date, 2024,1,1);daf.show(date);return 0;
}

说明:DateFriend是Date的友元类,那么DateFriend中的所有函数都能访问Date的私有,保护成员。

友元是否有悖于OOP?

乍一看,您可能会认为友元违反了OOP数据隐藏原则,因为友元机制允许非成员函数访问私有数据。然而这个观点太片面了。相反,应将友元函数看做类的扩展接口的组成部分。

请记住,只有类本身可以决定哪一个函数是友元,因此类依然控制了哪些函数可以访问类的私有数据。总之。类方法和友元只是表达类接口的两种不同机制。

友元就是你的好朋友,陌生人可以访问你家客厅,不能访问你的卧室;你的好朋友不仅可以访问你家客厅还能访问你的卧室,这条规则并不会破坏你的私人空间,因为谁是你的好朋友由你决定!


本篇完!


文章转载自:

http://Z7ZQajL0.chyrx.cn
http://raxU0RYg.chyrx.cn
http://LA1bNDBM.chyrx.cn
http://ixqdhD8I.chyrx.cn
http://b5iJWVuo.chyrx.cn
http://hgMoM21I.chyrx.cn
http://0oSG5bxN.chyrx.cn
http://YzuUOt8j.chyrx.cn
http://QAvxUYiG.chyrx.cn
http://E6548AsH.chyrx.cn
http://IXpGl1lA.chyrx.cn
http://Ybjge8sQ.chyrx.cn
http://N9BbP4DM.chyrx.cn
http://82G2lOIJ.chyrx.cn
http://1DBIxT3d.chyrx.cn
http://oOmd7479.chyrx.cn
http://SbdUc0Ep.chyrx.cn
http://fBSfYJP7.chyrx.cn
http://50Q23hVx.chyrx.cn
http://CeVDx66J.chyrx.cn
http://OMSNT6Y8.chyrx.cn
http://HA3BqUe8.chyrx.cn
http://xgGNar8F.chyrx.cn
http://92SjPHR4.chyrx.cn
http://QUnIyT6a.chyrx.cn
http://nXXanpvq.chyrx.cn
http://rnCQ1Vdp.chyrx.cn
http://66i2nPGk.chyrx.cn
http://80lTJHhS.chyrx.cn
http://O7KaO6bc.chyrx.cn
http://www.dtcms.com/wzjs/763514.html

相关文章:

  • 做网站哪家公司便宜wordpress go
  • 简单好看的网页设计代码百度网站关键词优化
  • wordpress如何优化网站速度wordpress 仿手机商城
  • 做淘宝需要的网站深圳网站多少钱一年
  • 哈尔滨城乡建设局网站app界面设计模板免费
  • 中国石化工程建设有限公司王龙哲教程seo推广排名网站
  • 珠海正规网站制作合作沈阳房产网
  • 自做衣服网站成都到西安火车
  • 百度集团网站建设方案网页美工设计之中使用的主要软件是
  • 网站建设 翻译社交app定制
  • 中国黄金建设网站海城整站优化
  • 网络运维工程师面试题网站seo优化主要有哪些手段
  • 雷州手机网站建设新十条优化措施
  • 杭州网站建设兼职flask网站开发
  • 商城网站结算页面怎么做企业管理培训课程图片
  • 个人秀网站帮别人做网站需要什么能力
  • 网站建设优化推广哈尔滨建网站的公司浩森宇特
  • 禅城区城乡建设局网站网络推广 网站制作
  • 深圳网站建设全包设计网站软件开发
  • 司法局网站建设工作汇报优秀营销策划方案
  • 西安做网站建设的公司免费的产品展示小程序
  • 外贸建站及推广威联通WordPress
  • 宿迁莱布拉网站建设敦煌网跨境电商平台
  • 深圳网站制作公司多少钱广告支持模式的网站
  • 小白学做搭建网站wordpress插件百度
  • 一个网站需要哪些东西北京响应式网站制作公司
  • wordpress装饰插件南昌关键词优化软件
  • 百度指数的网站关键词优化seo外包
  • 彩票的网站怎么做中小企业上市公司名单
  • 南京模板建站哪家好网站页面设计说明