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

网站建设a云世家网络品牌推广合同

网站建设a云世家网络,品牌推广合同,东钱湖镇建设局网站,蒙自网站开发文章目录加号&#xff08;&#xff09;运算符重载左移&#xff08;<<&#xff09;运算符重载递增&#xff08;&#xff09;运算符重载赋值&#xff08;&#xff09;运算符重载关系运算符重载函数调用运算符重载运算符重载概念&#xff1a; 对已有的运算符重新进行定义&am…

文章目录

  • 加号(+)运算符重载
  • 左移(<<)运算符重载
  • 递增(++)运算符重载
  • 赋值(=)运算符重载
  • 关系运算符重载
  • 函数调用运算符重载


运算符重载概念:
对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。

加号(+)运算符重载

作用:实现两个自定义数据类型相加的运算。

#include<iostream>
using namespace std;class Person
{
public://1、成员函数重载+号/*Person operator+(Person& p){Person temp;temp.m_A = this->m_A + p.m_A;temp.m_B = this->m_B + p.m_B;return temp;}*/int m_A;int m_B;
};//2、全局函数重载+号
Person operator+(Person& p1, Person& p2)
{Person temp;temp.m_A = p1.m_A + p2.m_A;temp.m_B = p1.m_B + p2.m_B;return temp;
}//函数重载
Person operator+(Person& p1, int num)
{Person temp;temp.m_A = p1.m_A + num;temp.m_B = p1.m_B + num;return temp;
}void test()
{Person p1;p1.m_A = 10;p1.m_B = 10;Person p2;p2.m_A = 10;p2.m_B = 10;Person p3 = p1 + p2;//1、成员函数重载本质调用://Person p3 = p1.operator+(p2);//2、全局函数重载本质调用: //Person p3 = operator+(p1, p2);Person p4 = p1 + 100;//Person+intcout << "p3.m_A=" << p3.m_A << endl;cout << "p3.m_B=" << p3.m_B << endl;cout << "p4.m_A=" << p4.m_A << endl;cout << "p4.m_B=" << p4.m_B << endl;
}int main()
{test();system("pause");return 0;
}输出:
p3.m_A=20
p3.m_B=20
p4.m_A=110
p4.m_B=110

总结:
1、对于内置的数据类型的表达式的运算符是不可能改变的;
2、不要滥用运算符重载。

左移(<<)运算符重载

作用:可以输出自定义数据类型。

#include<iostream>
using namespace std;class Person
{friend ostream& operator<<(ostream& out, Person& p);public:Person(int a,int b){m_A = a;m_B = b;}//利用成员函数重载左移运算符//p.operator<<(cout)简化版本p<<cout//不会利用成员函数重载<<,因为无法实现cout在左侧/*void operator<<(cout){}*/
private:int m_A;int m_B;
};//只能利用全局函数重载左移运算符
//ostream对象只能有一个
ostream& operator<<(ostream& out, Person& p)
{out << "m_A=" << p.m_A << "m_B=" << p.m_B;return out;//链式编程思想
}void test()
{Person p(10, 20);cout << p << endl;
}int main()
{test();system("pause");return 0;
}

总结:
重载左移运算符配合友元可以实现输出自定义数据类型。

递增(++)运算符重载

作用:通过重载递增运算符,实现自己的整型数据

#include<iostream>
using namespace std;class MyInterger
{friend ostream& operator<<(ostream& out, MyInterger myint);public:MyInterger(){m_num = 0;}//前置++//返回引用为了一种对一个数据进行递增操作MyInterger& operator++() {//先++m_num++;//再返回return *this;}//后置++//void operator++(int) int代表占位参数,可以用于区分前置和后置递增MyInterger operator++(int) {//先返回MyInterger temp = *this;//记录当前本身的值,然后让本身的值加1,但是返回的是以前的值,达到先返回后++//再++m_num++;return temp;}
private:int m_num;
};ostream& operator<<(ostream& out, MyInterger myint)
{out << myint.m_num;return out;
}//前置++,先++ 再返回
void test01()
{MyInterger myInt;cout << ++myInt << endl;cout << myInt << endl;
}//后置++,先返回 再++
void test02()
{MyInterger myInt;cout << myInt++ << endl;cout << myInt << endl;
}int main()
{test01();test02();system("pause");return 0;
}

总结:前置递增返回引用,后置递增返回值。

赋值(=)运算符重载

c++编译器至少给一个类添加4个函数:
1、默认构造函数(无参,函数体为空)
2、默认析构函数(无参,函数体为空)
3、默认拷贝构造函数,对属性进行值拷贝
4、赋值运算符operator=,对属性进行值拷贝

如果类中有属性指向堆区,做赋值操作是也会出现深浅拷贝问题。

#include<iostream>
using namespace std;class Person
{public:Person(int age){m_age = new int(age);}//重载赋值运算符Person& operator=(Person& p){if (m_age != NULL){delete m_age;m_age = NULL;}//编译器提供的代码是浅拷贝//m_age = p.m_age;//提供深拷贝解决浅拷贝的问题m_age = new int(*p.m_age);//返回自身return *this;}~Person(){if (m_age != NULL){delete m_age;m_age = NULL;}}int *m_age;
};//前置++,先++ 再返回
void test()
{Person p1(18);Person p2(20);Person p3(22);p3 = p2 = p1;//赋值操作cout << "p1的年龄为:" << *p1.m_age << endl;cout << "p2的年龄为:" << *p2.m_age << endl;cout << "p3的年龄为:" << *p3.m_age << endl;
}int main()
{test();system("pause");return 0;
}

关系运算符重载

作用:重载关系运算符,可以让两个自定义类型对象进行对比操作。

#include<iostream>
using namespace std;class Person
{public:Person(string name,int age){this->m_name = name;this->m_age = age;}//重载关系运算符==bool operator==(Person& p){if (this->m_name == p.m_name && this->m_age == p.m_age){return true;}else{return false;}}//重载关系运算符!=bool operator!=(Person& p){if (this->m_name == p.m_name && this->m_age == p.m_age){return false;}else{return true;}}string m_name;int m_age;
};void test()
{Person a("张三", 18);Person b("张三", 18);if (a == b){cout << "a和b相等" << endl;}else{cout << "a和b不相等" << endl;}if (a != b){cout << "a和b不相等" << endl;}else{cout << "a和b相等" << endl;}
}int main()
{test();system("pause");return 0;
}

函数调用运算符重载

函数调用运算符()也可以重载;
由于重载后使用的方式非常像函数的调用,因此称为仿函数;
仿函数没有固定写法,非常灵活。

#include<iostream>
using namespace std;class MyPrint
{
public://重载函数调用运算符void operator()(string test){cout << test << endl;}
};void MyPrint02(string test)
{cout << test << endl;
}void test01()
{MyPrint myprint;myprint("helloworld");//由于使用起来非常类似于函数调用,因此称为仿函数MyPrint02("helloworld");
}//仿函数调用非常灵活,没有固定写法
//加法类
class MyAdd
{
public:int operator()(int num1, int num2){return num1 + num2;}
};void test02()
{MyAdd myadd;//非匿名函数对象,名字是myaddint ret = myadd(100, 100);cout << "ret=" << ret << endl;//匿名函数对象cout << MyAdd()(100, 100) << endl;
}int main()
{test01();system("pause");return 0;
}

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

相关文章:

  • 网站推广优化企业建设网站的案例
  • 广州印刷网站建设移动网站建设的前期规划内容
  • 自助建站免费永久阿里云建设网站步骤
  • 西安有哪些网站建设公司wordpress极客学院
  • 怎么用手机黑网站网站开发公司市场
  • 做云图的网站装修网站系统
  • 广州腾虎网络网站建设熊掌号国内规模大的建站公司
  • 手机网站建设的图片wordpress网站如何app
  • 做网站难还是app网站编程多少钱
  • 公众号外链网站怎么做seo搜索优化公司
  • 国外网站的建设wordpress回复下载
  • 好网站建设公司的网站人力资源劳务派遣公司
  • 刘强东最开始在哪个平台做网站wordpress woz 下载
  • 襄阳高端网站建设新办公司流程及资料
  • 吉安网站制作公司网页设计图片大小设置
  • js网站繁体广西壮族自治区是哪个省
  • 网站没被百度收录wordpress文章导入
  • 网站数据库结构被删了怎么办大连企业做网站
  • 站点推广免费玩游戏
  • 商务网站建设课程设计wordpress阿里云虚拟机
  • soho个人可以建网站吗专业开发网站多少钱
  • 石狮网站建设费用做网站用html
  • 教你学做窗帘的网站建设小型网站系统开题报告
  • 汽车网站建设流程图无法连接wordpress站点
  • 建设网站一般需要多少钱网站建设技术文案
  • 网站设置在哪里找萍乡网站开发
  • 电商网站开发哪家好垂直门户网站建设
  • 免费自己建网站网站建设需要学多久
  • 苏州建设网站价格建设彩票网站制作
  • 怎么做网站申请广告合肥生态丽景网站建设