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

贵阳地铁建设网站网站开发的教学视频

贵阳地铁建设网站,网站开发的教学视频,wordpress外网访问不了,山东省企业年报网上申报入口文章目录加号&#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/8799/

相关文章:

  • wps如何做网站网站开发大概需要多少钱
  • 网站制作公司 知乎网站模版建设教程
  • 杰讯山西网站建设政协网站 两学一做专题研讨
  • 网站建设课程设计论文做网站用什么免费字体
  • 广州南沙区建设局网站百度竞价收费标准
  • 潍坊信息网网站建设m2型虚拟主机带宽 网站
  • 做好网站开发工作总结wordpress影视主题52破解
  • 房地产网站开发公司电话网站解析多久
  • 提升自己建设自己的网站培训总结怎么写
  • 自己做网站排名好吗wordpress主题视频教程
  • 随州北京网站建设wordpress视频滑块
  • 深圳网站建设公司平台网站配色表
  • 本地门户网站源码wordpress注册页面404
  • 做网站的参考文献有哪些wordpress author 1
  • 软件网站开发平台描述网页设计流程
  • 保山网站建设服务网站制作公司 知道万维科技
  • app应用网站html5模板wordpress怎么添加ga统计
  • 中国外贸人才网seo公司是怎么做的
  • 重新做网站站长之家ping
  • 网站建设服务合同瑞安网站建设公司
  • cms 企业网站管理系统免费友情链接网页
  • 定制网站开发冬天里的白玫瑰营销型网站建设多少钱
  • mvc5网站开发实战详解ppt之家模板免费下载
  • 金融股票类app网站开发舆情信息网站
  • 做网站数据库怎么建西安电子商务网站开发
  • 医院互联网网站建设网站开发协助方案
  • wordpress手机建站教程灯塔建设网站
  • 泰安中文网站建设电话泰安人才信息网官网
  • 龙岗同乐社区网站建设手机访问网站建设中
  • 常州市住房建设局网站杭州最新消息