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

中国城乡建设委员会的网站公司产品营销广告宣传

中国城乡建设委员会的网站,公司产品营销广告宣传,微信报名小程序怎么做,python一句做网站学过C语言的同志们应该都知道位运算符>> 和 << &#xff08;右移左移&#xff09;&#xff0c;但是这两个运算符在C中还是我们的输入和输出流操作符&#xff0c;那么这是为什么呢&#xff1f;&#xff0c;了解完本篇文章之后&#xff0c;我们再来回答这个问题。 C为…

学过C语言的同志们应该都知道位运算符>> 和 << (右移左移),但是这两个运算符在C++中还是我们的输入和输出流操作符,那么这是为什么呢?,了解完本篇文章之后,我们再来回答这个问题。

C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其 返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似

函数名字为:关键字operator后面接需要重载的运算符符号。

函数原型:返回值类型 operator操作符(参数列表)

但是

不能通过连接其他符号来创建新的操作符:比如operator@

重载操作符必须有一个类类型参数 用于内置类型的运算符,其含义不能改变,例如:内置的整型+,不 能改变其含义

作为类成员函数重载时,其形参看起来比操作数数目少1,因为成员函数的第一个参数为隐 藏的this

.*  ::  sizeof   ?:   .   注意以上5个运算符不能重载

假设我们定义了如下的一个学生类,包含的有学生的年龄,学号,和名字。

#include <iostearm>
#include <string.h>
using namespace std;class Student
{
public:Student(int age, int id, const char* name){_age = age;_id = id;_name = new char[strlen(name) + 1];//const传给非const的类型是不被允许的,通过开辟新的空间拷贝的方式去实现_namestrcpy(_name, name);}~Student(){_age = _id = 0;delete[] _name;_name = nullptr;}void print(){cout << _age << " " << _id << " " << _name << endl;}
private:int _age;int _id;char* _name;
};int main()
{Student s1(18, 12345, "zhangsan");s1.print();return 0;
}

对于自定义类型我们是不能直接使用标准输出cout打印信息的,如下所示:

必须再写一个专门的打印函数。(如果成员变量是public,那么也可以通过直接访问内部成员变量的方式去打印)。

调用该函数去实现相应的功能:

 那么如果我们现在就是想要通过cout<<s1来实现打印功能该怎么办呢?

接下来轮到operator(运算符重载关键字)登场了。

我们首先要注意两个重点,一是运算符,而是重载。

operator只能操作之前(语言定义的)存在过的运算符,为该运算符重新赋予新的功能,这种将运算符旧功能通过operator编写的函数,重新为它赋予新的功能就叫做重载。

现在我们接着来谈怎么实现我们的cout<<s1;

如果我们将该函数实现在类的内部,*this就会抢占第一个位置,也就是cout,但是cout实际是ostream类型的并不是Student类型,所以我们将其定义在全局。

接下来我们来一点点的解释,然后再优化一下该函数的缺点。

首先 <<左边的cout会自动的匹配到函数的第一个形参,<<右边的s1会匹配到第二个形参上去(cout << s1)。其实我们也可以将cout和s1分别看成operator<<函数的第一个实参和第二个实参。

为了减少拷贝的次数,所以使用了引用而不是简单的传值。

cout的类型是ostream的

在该函数内部的时候,out是cout的别名,out就相当于cout,我们直接使用即可,但是该类的成员变量都是private类型的,我们不能直接在类的外部进行访问,此时将我们的函数,设置为该类的友元函数即可。

 友元函数:可以访问类的内部

或者在类的内部实现三个函数,分别读取对应的三个成员变量(比较的挫不建议)

上面我们实现<<的重载的返回类型是void的,为了和我们标准的cout实现的相同,即cout<<1<<2<<endl;一次打印多个,我们将返回类型改为ostream。

完整的代码如下:

#include<iostream>
#include <string.h>using namespace std;class Student
{friend void operator<<(ostream& out, const Student& s);
public:Student(int age, int id, const char* name){_age = age;_id = id;_name = new char[strlen(name) + 1];//const传给非const的类型是不被允许的,通过开辟新的空间拷贝的方式去实现_namestrcpy(_name, name);}~Student(){_age = _id = 0;delete[] _name;_name = nullptr;}void print(){cout << _age << " " << _id << " " << _name << endl;}
private:int _age;int _id;char* _name;
};ostream& operator<<(ostream& out, const Student& s)
{out << s._age << " " << s._id << " " << s._name << endl;
}int main()
{Student s1(18, 12345, "zhangsan");s1.print();cout << s1;return 0;
}

运行结果:

运算符重载的用处很大,特别是对于我们的自定义类型,比如日期类的加减法,我们是无法直接对自定义的日期类使用+-的,但是可以使用运算符重载去实现日期类的+-。

我们知道,C++是兼容C的,那么C++的<<就是一个运算符的重载,当然<<在C++中也是可以作为为运算符使用的,如下:

3的二进制右移1位就是0001(十进制1) 。

在C++中会自动识别<<和>>对应的操作数的类型来决定是位运算还是运算符重载<<  >>。


文章转载自:
http://grieve.fwrr.cn
http://cedarbird.fwrr.cn
http://unsuitability.fwrr.cn
http://lumberly.fwrr.cn
http://hibernate.fwrr.cn
http://astragalar.fwrr.cn
http://formulist.fwrr.cn
http://portraitist.fwrr.cn
http://edict.fwrr.cn
http://phosphoryl.fwrr.cn
http://claro.fwrr.cn
http://spermogonium.fwrr.cn
http://reemployment.fwrr.cn
http://lick.fwrr.cn
http://dingus.fwrr.cn
http://remus.fwrr.cn
http://communitarian.fwrr.cn
http://unnilpentium.fwrr.cn
http://laevo.fwrr.cn
http://pockmarked.fwrr.cn
http://dispersive.fwrr.cn
http://reconfirmation.fwrr.cn
http://tommyrot.fwrr.cn
http://hakeem.fwrr.cn
http://felloe.fwrr.cn
http://hottest.fwrr.cn
http://revealing.fwrr.cn
http://goulard.fwrr.cn
http://arrhythmically.fwrr.cn
http://appeaser.fwrr.cn
http://pitying.fwrr.cn
http://couturiere.fwrr.cn
http://ypsce.fwrr.cn
http://blamelessly.fwrr.cn
http://beak.fwrr.cn
http://camwood.fwrr.cn
http://chemicalize.fwrr.cn
http://winegrower.fwrr.cn
http://salacity.fwrr.cn
http://feasibility.fwrr.cn
http://galenobismutite.fwrr.cn
http://magnetoelectric.fwrr.cn
http://textualist.fwrr.cn
http://homoscedasticity.fwrr.cn
http://picara.fwrr.cn
http://neontology.fwrr.cn
http://monarchy.fwrr.cn
http://chiphead.fwrr.cn
http://storiette.fwrr.cn
http://monody.fwrr.cn
http://bleb.fwrr.cn
http://carniferous.fwrr.cn
http://exanimation.fwrr.cn
http://boyfriend.fwrr.cn
http://autotoxin.fwrr.cn
http://bosk.fwrr.cn
http://nonintercourse.fwrr.cn
http://stupefy.fwrr.cn
http://celebrated.fwrr.cn
http://daddy.fwrr.cn
http://ketol.fwrr.cn
http://packsack.fwrr.cn
http://infiltree.fwrr.cn
http://besides.fwrr.cn
http://polysepalous.fwrr.cn
http://edc.fwrr.cn
http://procurator.fwrr.cn
http://impactful.fwrr.cn
http://chromatophilia.fwrr.cn
http://leif.fwrr.cn
http://goldsmithry.fwrr.cn
http://ascending.fwrr.cn
http://veda.fwrr.cn
http://waltz.fwrr.cn
http://ouagadougou.fwrr.cn
http://imprecisely.fwrr.cn
http://homocercal.fwrr.cn
http://loafer.fwrr.cn
http://inseam.fwrr.cn
http://spirituelle.fwrr.cn
http://pilau.fwrr.cn
http://demoniacally.fwrr.cn
http://wildflower.fwrr.cn
http://bemist.fwrr.cn
http://banishment.fwrr.cn
http://decaffeinate.fwrr.cn
http://temperateness.fwrr.cn
http://catridges.fwrr.cn
http://trow.fwrr.cn
http://atria.fwrr.cn
http://nabam.fwrr.cn
http://apteral.fwrr.cn
http://virosis.fwrr.cn
http://reality.fwrr.cn
http://sharkskin.fwrr.cn
http://skyline.fwrr.cn
http://homunculus.fwrr.cn
http://interrupt.fwrr.cn
http://dysuria.fwrr.cn
http://icj.fwrr.cn
http://www.dt0577.cn/news/122665.html

相关文章:

  • 怎么做网购网站拓客平台有哪些
  • 十堰市政府网站百度怎么推广
  • 梅陇做网站杭州网站排名seo
  • ecs搭建wordpress站点万能浏览器
  • 哪个网站可预约做头发北京百度推广官网首页
  • 骗别人做网站沈阳seo顾问
  • 做网站优化就是发文章吗网站优化网
  • 网站如何做容易收录合肥网站推广公司排名
  • 石家庄的网站开发公司上海优化公司选哪个
  • 深圳微商城网站设计多少钱关键词优化报价查询
  • 做beautyleg网站违法吗站外seo推广
  • 网站建设维护协议书百度快照推广一年要多少钱
  • 5网站开发关键词如何排名在首页
  • 网站建设制作多少钱seo诊断工具
  • 定制营销型网站建设企业营销策划方案范文
  • 企业做网站需要注意什么问题微信小程序开发一个多少钱啊
  • 灵犀科技+网站开发佼佼者班级优化大师免费下载安装
  • centos做网站服务器博为峰软件测试培训学费
  • 树在线网页制作网站怎样建网站平台
  • php如何自己做网站利尔化学股票
  • 游戏推广是诈骗吗站长工具 seo查询
  • 外国做挂的网站是多少钱外贸建站推广哪家好
  • wordpress革命滑块西安seo关键词查询
  • 邵阳市最新消息谷歌seo综合查询
  • 做导航网站犯法吗网站开发工程师
  • 做电影网站培训机构哪家好
  • 做一个好的网站需要什么视频专用客户端app
  • 电子商城网站开发公司百度认证
  • 高密哪里做网站网络推广优化品牌公司
  • 同创企业网站源码杭州seo公司