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

电脑编程与网站建设app开发公司应聘

电脑编程与网站建设,app开发公司应聘,个人logo设计图片,主页页面C可以重载大多数操作符&#xff0c;如算术运算符号&#xff0c;-号。 位操作符<<,>> 下标符号[]等都可以重载。 重载的意思&#xff0c;是让这些符号&#xff0c;按你定义的行为来执行代码&#xff0c;但是这种自定义&#xff0c;是有限制的&#xff0c;必须有一…

C++可以重载大多数操作符,如算术运算符+号,-号。

位操作符<<,>>

下标符号[]等都可以重载。

重载的意思,是让这些符号,按你定义的行为来执行代码,但是这种自定义,是有限制的,必须有一个自定义类(结构体等也行)参与其中。

比如,int a,int b;然后a+b,这种情况的+号是不能重载的。

所以通常的用法是,编写一个类,然后重载操作符,比如:

#include <iostream>using namespace std;class myInt {
public:int value;int operator+(int num) {return value + num;}
};int main()
{myInt a;a.value = 5;int res = a + 18;cout << res << endl;
}

输出结果:

结果为23,可见重载执行正常,否则类对象是不支持+号运算的。 

在类中可以看到这这个代码:

	int operator+(int num) {return value + num;}

 operator+表示重载+号运算符, 最前面的int开头,是表示返回值类型,参数(int num),表示+号右侧类型。

那么像这种在类里面通过成员函数的方式重载的,默认左侧为此类的对象参数。

也就是说int res = a + 18; +号左侧a为myInt对象,右侧为int类型,触发重载,调用重载函数中的代码。

如果我重载了+号,那么在程序中,+号是随处可见的,那么这种情况下,不会引起混乱吗?

其实,你可以把这种重载相当于你自定义了一个另类函数。

那么道理跟函数重载一样,你调用同名函数,为什么不会引起混乱,那是因为有参数类型限制。

确保调用到指定的函数。

操作符重载也是一样,有类型限制的,你调用的是哪个类对象的+号,它就会执行相应的这个类对应的重载代码。

那么我们可以推测,int res=a+18,那么如果int在左侧,myInt在右侧。即int res=18+a;

是不合法的,没有与之匹配的重载,所以这里有着严格的要求,包括+号是二元操作符,只能有左右两个参数,你不能像这样int operator+(int num,int num1) 去定义它。

如果我要实现int res=18+a该怎么做?

重载必须定义为全局或者友元函数才可实现,因为如果是成员函数的话,是要求操作符左侧必须为类对象本身。

而全局和友元则可灵活的指定顺序,如:

全局函数重载方式:

// 全局函数:支持 int + myInt
int operator+(int num,  myInt m) {return num + m.value;
}

注意将函数代码放在类定义后面,否则认不到myInt类型,没有声明的话。

这样,就会支持18+a的重载,可以看到有两个参数,因为不是成员函数,所以需要显式指定两个参数,int num为左侧类型,myInt m为右侧类型,这样当int res=18+a,符合全局函数重载描述,即根据参数类型调用指定的重载。执行全局函数的代码。

当然上面只是示例说明,一般我们建议写成友元函数,像这样:


#include <iostream>using namespace std;class myInt {
public:int value;int operator+(int num) {return value + num;}// 友元函数:int + myIntfriend int operator+(int num, myInt m){return num + m.value;}};int main()
{myInt a;a.value = 5;int res = 18 + a;cout << res << endl;
}

 结果:

下标操作符重载

接下来我们来重载[]这个操作符,巩固一下我们的学习成果,[]也是一个二元操作符,它的左侧是类对象,右侧是索引。知道了这个,我们就好重载了,如下:

#include <iostream>using namespace std;class myInt {
public:int a;int b;int operator[](int index) {if (index == 0) return a;if (index == 1)  return b;else return 0;}};int main()
{myInt mya;mya.a = 10;mya.b = 100;cout << mya[0] << endl;cout << mya[1] << endl;}

结果:

 

关键语句:

	int operator[](int index) {if (index == 0) return a;if (index == 1)  return b;else return 0;}

重载[]操作符,如果索引为0,返回a,为1返回b。

运行结果是10和100,说明执行正常。

但这里,只是读取值,一般像[]这种用法,除了读取值,还需要写入值。

而我这里并没有这样的功能,那要怎么实现呢?

 我们需要返回的值,不是按值传递,而是类似于指针的形式,比如mya[0]返回的是个指针:

#include <iostream>using namespace std;class myInt {
public:int a;int b;int * operator[](int index) {if (index == 0) return &a;if (index == 1)  return &b;}
};int main()
{myInt mya;mya.a = 10;mya.b = 100;*(mya[0]) = 1000;cout << *(mya[0]) << endl;cout << *(mya[1]) << endl;}

结果:

可以正常赋值和取值,但是这种实现,使用起来需要加上*操作符,会变得很奇怪。

所以最好的方法是,通过&这个引用操作符, 返回类型为int &,给变量取别名的方式,如下:

#include <iostream>using namespace std;class myInt {
public:int a;int b;int & operator[](int index) {if (index == 0) return a;if (index == 1)  return b;}
};int main()
{myInt mya;mya.a = 10;mya.b = 100;mya[0] = 1000;cout << mya[0]<< endl;cout << mya[1]<< endl;}

结果输出1000和100,正常,这样看起来就顺眼多了。 


文章转载自:

http://hrW3sgNj.fssjw.cn
http://22kqkWxO.fssjw.cn
http://bI3KQq7Z.fssjw.cn
http://lm4KptxL.fssjw.cn
http://fAr9nNTM.fssjw.cn
http://O9onEITr.fssjw.cn
http://I6FFjUnX.fssjw.cn
http://8s5QTpSX.fssjw.cn
http://Aq9HHDX3.fssjw.cn
http://kjKS32rd.fssjw.cn
http://gKeUoAj5.fssjw.cn
http://T7UX92MH.fssjw.cn
http://zM0qUVBj.fssjw.cn
http://MhQsYEIn.fssjw.cn
http://zRNIFyh8.fssjw.cn
http://YvNGgePv.fssjw.cn
http://6aCqaAmX.fssjw.cn
http://M9tv7LAU.fssjw.cn
http://riyeTd4Y.fssjw.cn
http://eHuAKQ1v.fssjw.cn
http://Tu6IjOSt.fssjw.cn
http://WYY8071a.fssjw.cn
http://iq67p6HP.fssjw.cn
http://ENmhUTiV.fssjw.cn
http://3NjZzpvZ.fssjw.cn
http://YainT4EO.fssjw.cn
http://Iw6bKPyY.fssjw.cn
http://seHsHP08.fssjw.cn
http://C8rPGVvI.fssjw.cn
http://QObBdYC2.fssjw.cn
http://www.dtcms.com/wzjs/681818.html

相关文章:

  • 服务公司注册资金多少合适优化网站图片
  • 网站建设免费建站浙江建设监理协会网站
  • 上海建网站哪家好设计中国展
  • 邯郸网站建设公司怎么把本地wordpress上传到服务器
  • 笑话网站源码带wap怎样做网站优化排名
  • 沈阳网站开发制作wordpress调用二级分类
  • vps如何建两个网站东莞网站推广营销
  • 东莞市外贸网站建设公司wordpress版本推荐
  • html网站的直播怎么做的网站开发实训室
  • 网站建设 海南工业设计优秀作品
  • 怎么建立网站赚钱登录html模板
  • 为什么要给大夫做网站网站建设哈尔滨网站建设1
  • 大型门户网站建设是什么wordpress 商务主题
  • 建立网站的详细步骤知乎软件app开发制作
  • html5 网站 优势电子商务网站建设资料
  • 合肥专业做公司网站免费网站自动跳转
  • 罗湖装修公司网站建设手机app界面设计网站
  • 电子商务网站建设实验wordpress积分
  • 北京用网站模板建站h5微网站建设多少钱
  • 怎样建一个自己公司的网站discuz可以做门户网站么
  • 深圳品牌做网站公司有哪些北京网络营销网站
  • 爬虫怎么看网站开发者模式最近的电脑培训学校
  • 青海省建设厅网站地址网页版梦幻西游大闹天宫困难
  • 网站设计如何自学当前互联网发展现状
  • 马鞍山市 网站建设seo公司怎样
  • 高端的的网站建设公司网站建设 快速
  • 天津网站建设优化企业商丘网站建设和制作
  • 藁城手机网站建设怎么申请小程序流程
  • wordpress怎么增加字段优化推广网站推荐
  • 网站建设用户需求微指数