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

阳逻开发区网站建设中企动力seo与sem的区别和联系

阳逻开发区网站建设中企动力,seo与sem的区别和联系,祥云平台做网站如何,企业logo设计免费生成器在之前的友元中就曾经讲过,我们为了去访问修改私有成员中的数据时,只能通过公有的办法去进行访问操作,非常的局限。所以C引用了友元函数,只要加上friend关键字,C的这个类,会自动把这个函数的权限拉到类内&a…

在之前的友元中就曾经讲过,我们为了去访问修改私有成员中的数据时,只能通过公有的办法去进行访问操作,非常的局限。所以C++引用了友元函数,只要加上friend关键字,C++的这个类,会自动把这个函数的权限拉到类内,这样就可以访问私有成员了。

上一篇文章,讲了重载运算符的操作。但有些运算符不能够在类内进行重载,例如输入输出的符号。下面我会详细讲,为什么不能在类内进行重载。

这里我们先假设有一个类:

A{};//功能暂且不写,知道是个类就行了

首先,普通类内重载,会自带一个this指针,指向用此函数的对象。这被称作第一操作数。

如果在定义+号的时候,实际上是并不是简单的(类对象)+(某某)亦或是(某某)+(类对象);

它实际上全部的写法应该是:

A    a;                     //这里定义了一个对象a

a.operator+(某某);      //这是全部写法,也是正常情况应该写的情况,只是我们平时简写,编译器仍然认识罢了。

a+(某某)   // 这是我们平时的写法

比如你想重载<<或者>>符号,这种情况,他的第一操作符就一定不是类本身,例如:

A    a;

我们不可能写成:a<<或者是a>>;我们正常的写法应该是:cin >>a;cout << a;

这里第一操作符并不是a这个对象,而是cin/cout。这是ios的输入输出的参数。

这里有人就要问了,那(类对象)+(某某);我也可以写成(某某)+(类对象);这里实际上是交换律,因为,这里类对象写的地方,并不是唯一的,可以进行交换,这种情况可以不算。

话不多说,我们使用代码来进行讲解,下面先给大家展示时间类运算符重载,作为对比,我先写类内成员函数重载,再写类外友元重载,大家可以复制下来,看看。

#include <iostream>
#include <string>
using namespace std;/*
* 1.类的成员    在类内的运算符重载函数的第一个操作数一定是类的对象
* 总结:
*   有的情况运算符必须写成非成员函数.这个函数如果需要获得类对象的私有数据,则有如下方法
*   1.可以利用交换律(前提是类已经实现该运算符的重载.1.5*t->t*1.5)
*   2.类把该函数声明为它的友元函数
*   3.类提供获取私有数据的公有方法
*   
*   举例:如下  
*/
class Time
{
private:int hours;//小时int minutes;//分钟
public:Time(int h = 0, int m = 0) :hours(h), minutes(m)//构造函数{}Time operator +(const Time& t)const;//重载 +,注意返回值不是引用Time operator -(const Time& t)const//重载 -{int tmp = (hours * 60 + minutes) - (t.hours * 60 + t.minutes);//分钟return Time(tmp / 60, tmp % 60);}Time operator *(double n)const;//重载 *  .含义;3:40 * 3 ->11小时0分//3*3:40  不是void show() const;//提供获得时间的公有方法/* int GetHours()const{return hours;}int GetMinutes()const{return minutes;}*/
};Time Time::operator+(const Time& t)const  //2:30+2:45
{return Time(hours + t.hours + (minutes + t.minutes) / 60, (minutes + t.minutes) % 60);
}Time Time::operator *(double n)const  // Time * 小数
{double tmp = (hours * 60 + minutes) * n;return Time{ (int)tmp / 60,(int)tmp % 60 };
}void Time::show() const
{cout << hours << "小时," << minutes << "分钟" << endl;
}Time operator*(double n,const Time &t)//普通函数的形式重载*
{//double tmp = n * (t.hours * 60 + t.minutes);//错误,这个函数不是Time成员,不能访问它的私有// int tmp = (int)(n * (t.GetHours() * 60 + t.GetMinutes()));//  return Time(tmp/60,tmp%60);return t * n;//前提:已经实现了 t*n
}int main()
{Time t1{ 2,35 };Time t2 = { 2,40 };Time t3 = t1 + t2;//t1.operator+(t2);Time t4 = t2 - t1;//t2.operator-(t1);Time t5 = t1 * 1.5;Time t6 = 1.5 * t1;//没有实现 小数*时间t3.show();t4.show();t5.show();t6.show();//t1 * 3;//t1.operator*(3);//3*t1;//3.*(t1);//在3这个int类 没有实现对Time的*重载return 0;
}

接下来,作为对比,我继续把重载输入输出的代码。

#include <iostream>
#include <string>
using namespace std;class Time
{
private:int hours;//小时int minutes;//分钟public:Time(int h = 0, int m = 0);void show() const;//void operator <<(ostream& os)//os是输出流对象的引用//{//    os << hours << "小时,," << minutes << "分钟" << endl;//}friend Time operator *(double n, const Time& t);//这个是Time的友元函数friend ostream& operator <<(ostream& os, const Time& t);//这个是Time的友元函数//实现 >> 运算符重载   istreamfriend istream& operator >>(istream& is, Time& t);
};Time::Time(int h, int m)
{hours = h;minutes = m;
}void Time::show() const
{cout << hours << "小时," << minutes << "分钟" << endl;
}Time operator *(double n, const Time& t)
{int tmp = (int)(n * (t.hours * 60 + t.minutes));return Time(tmp/60,tmp%60);
}ostream & operator <<(ostream& os, const Time& t)//os不加const,需要把数据写入到输出流
{os << t.hours << "小时,," << t.minutes << "分钟" << endl;return os;
}istream& operator >>(istream& is, Time& t)
{return is >> t.hours >> t.minutes;
}int main()
{Time t1 = { 2,35 };Time t2 = { 2,40 };Time t3 = 1.5*t1;  //第一个操作数不是类对象,所以只能是非成员函数//t3.show();//t3 << cout; //可以作为类成员函数的,但不能理解cout << t3;//这个不能调用t3的成员函数,但我们需要cout << t1 << t2;cin >> t1; //5 30cout << t1;//5小时,30分钟// cout << t3 ;//错误,没有实现如何 cout<< Time的对象//cout 是 ostream类对象  ; cin是istream类对象return 0;
}

每日金句:

        一步一行,便无惧陷入泥沼!

                                                                                                           ---------------银枝

http://www.hkea.cn/news/108491/

相关文章:

  • 长沙公司做网站多少钱推广平台怎么做
  • 现在大家做电商网站用什么源码营销策略都有哪些
  • 可以做试卷的网站英语怎么说seo关键词排名优化系统源码
  • 网站怎么设置支付功能企业网站的主要类型有
  • 成都圣都装饰装修公司北京搜索优化排名公司
  • 境外建设网站贴吧互联网域名注册查询
  • 广州建站工作室淘客推广怎么做
  • 中国最大的网站建设公司百度广告联盟点击一次多少钱
  • wordpress单页主题营销seo手机关键词网址
  • dedecms做电影网站韩国最新新闻
  • 哪个网站做废旧好如何在百度上发布自己的广告
  • 网站表单及商品列表详情模板如何搭建自己的网站
  • 网站域名登记证明百度高级搜索怎么用
  • 国外网站在国内做镜像站点网站搭建费用
  • 网站后台如何添加关键词软件开发公司
  • 手机做网站的网站windows优化大师卸载不了
  • 万网速成网站有哪些 功能自己的网站怎么推广
  • 邯郸哪有做网站的河南百度推广公司
  • 我是做环保类产品注册哪些浏览量大的网站推销自己的产品比较好呢西安网站seo优化公司
  • 网页传奇游戏排行昆明网络推广优化
  • 商城模板网站模板网站软文是什么
  • 校园网站推广方案怎么做网站排名推广工具
  • 深圳罗湖企业网站建设报价网络媒体发稿平台
  • 用别人公司域名做网站线下推广的渠道和方法
  • php mysql的网站开发外贸推广平台
  • 济南网站建设认可搜点网络能百度指数有三个功能模块
  • 网上商城网站建设意义在线代理浏览网页
  • 网站图片切换代码百度下载并安装最新版
  • 微信公众平台号申请注册入口杭州seo公司
  • 本周实时热点新闻事件seo文章代写一篇多少钱