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

肇庆建设局网站那里做直播网站

肇庆建设局网站,那里做直播网站,贵州建设厅网站八大员报名入口,有赞分销文章目录 运算符重载加号运算符重载成员函数实现运算符重载全局函数实现运算符重载全局函数实现函数重载 左移运算符重载递增运算符重载赋值运算符重载关系运算符重载函数调用运算符重载 运算符重载 对已有的运算符重新进行定义,赋予其另一种功能,以适应…

文章目录

  • 运算符重载
    • 加号运算符重载
      • 成员函数实现运算符重载
      • 全局函数实现运算符重载
      • 全局函数实现函数重载
    • 左移运算符重载
    • 递增运算符重载
    • 赋值运算符重载
    • 关系运算符重载
    • 函数调用运算符重载

运算符重载

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

  • 对于内置的数据类型的表达式的运算符是不可能改变的

  • 不要滥用运算符重载

加号运算符重载

  • 可以计算自定义数据类型

成员函数实现运算符重载

  • 成员函数实现运算符重载的本质 p2.operator(p1)
#include <iostream>using namespace std;class Person{
public:Person(){}Person(int a, int b) {this->a=a;this->b=b;}// 成员函数实现运算符重载Person operator+(const Person& p) {Person temp;temp.a=this->a+p.a;temp.b=this->b+p.b;return temp;}
public:int a;int b;
};void test() {Person p1(10,10);Person p2(10,10);// 成员函数实现运算符重载的本质 p2.operator(p1)Person p3 = p1+p2;cout << "p3.a: " << p3.a << endl;cout << "p3.b: " << p3.b << endl;
}int main(){test();return 0;
}

全局函数实现运算符重载

  • 全局函数实现运算符重载的本质是operator+(p1,p2)
#include <iostream>using namespace std;class Person{
public:Person(){}Person(int a, int b) {this->a=a;this->b=b;}
public:int a;int b;
};// 全局函数实现运算符重载
Person operator+(Person p1, Person p2) {Person temp;temp.a=p1.a+p2.a;temp.b=p1.b+p2.b;return temp;
}
// 全局函数实现函数重载void test() {Person p1(10,10);Person p2(10,10);// 全局函数实现运算符重载的本质是operator+(p1,p2)Person p3 = p1+p2;cout << "p3.a: " << p3.a << endl;cout << "p3.b: " << p3.b << endl;
}int main(){test();return 0;
}

全局函数实现函数重载

  • 通过函数重载实现不同类型的加法运算
#include <iostream>using namespace std;class Person{
public:Person(){}Person(int a, int b) {this->a=a;this->b=b;}
public:int a;int b;
};// 全局函数实现函数重载
Person operator+(Person p1, int num) {Person temp;temp.a=p1.a+num;temp.b=p1.b+num;return temp;
}void test() {Person p1(10,10);int num = 100;// 通过函数重载实现了Person和int类型的加法运算Person p3 = p1+num;cout << "p3.a: " << p3.a << endl;cout << "p3.b: " << p3.b << endl;
}int main(){test();return 0;
}

左移运算符重载

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

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

#include <iostream>using namespace std;class Person{friend ostream& operator<<(ostream& cout, Person p);
public:Person(int a, int b){this->a = a;this->b = b;}// 成员函数重载左移运算符的本质是p<<cout// 在C++中一般不适用成员函数重载左移运算符,因为无法实现cout<<p的格式// operator<<(cout) {}
private:int a;int b;
};// ostream& 返回cout这样可以在链式使用时继续追加
// 本质:operator<<(cout, p),简化为cout<<p
ostream& operator<<(ostream& cout, Person& p) {cout << "a= " << p.a <<" b= " << p.b;return cout;
}void test(){Person p(1,1);cout << p << endl;
}int main(){test();return 0;
}

递增运算符重载

  • 通过重载自增运算符,实现自己的整形数据
#include <iostream>using namespace std;class MyInt{friend ostream& operator<<(ostream& cout, MyInt i);
public:// 重载前置++运算符,返回引用为了一直对一个数据进行递增操作MyInt& operator++(){num++;return *this;}// 重载后置++运算符// void operator++(int) int代表占位参数,可以用于区分前置和后置递增MyInt operator++(int){MyInt temp = *this;num++;return temp;}
private:int num;
};ostream& operator<<(ostream& cout, MyInt i){cout << i.num;return cout;
}void test(){MyInt myint;cout << ++(++myint) << endl;MyInt myint1;cout << (myint++)++ << endl;
}int main(){test();return 0;
}

赋值运算符重载

#include <iostream>using namespace std;class Person{
public:Person(int age) {this->age=new int(age);}Person& operator=(const Person& p) {// 编译器提供的是浅拷贝// age=p.age;// 先判断是否有属性在堆区,如果有先释放,然后在深拷贝if (age != NULL) {delete age;age=NULL;}// 深拷贝age=new int(*p.age);return *this;}~Person(){if (age == NULL) {return;}delete age;age=NULL;}int* age;
};void test(){Person p1(18);Person p2(20);Person p3(30);p3=p2=p1;cout << *p1.age << endl;cout << *p2.age << endl;cout << *p3.age << endl;
}int main(){test();return 0;
}

关系运算符重载

#include <iostream>using namespace std;class Person{friend ostream& operator<<(ostream& cout, Person& p);
public:Person(int age) {this->age=age;}bool operator==(const Person& p) {return age==p.age;}bool operator!=(const Person& p) {return age!=p.age;}bool operator>(const Person& p) {return age>p.age;}bool operator>=(const Person& p) {return age>=p.age;}bool operator<(const Person& p) {return age<p.age;}bool operator<=(const Person& p) {return age<=p.age;}
private:int age;
};ostream& operator<<(ostream& cout, Person& p){cout << p.age << endl;return cout;
}void test(){Person p1(18);Person p2(20);cout << (p1== p2) << endl;cout << (p1!= p2) << endl;cout << (p1>= p2) << endl;cout << (p1> p2) << endl;cout << (p1<= p2) << endl;cout << (p1< p2) << endl;
}int main(){test();return 0;
}

函数调用运算符重载

  • 由于重载后的使用方式很像函数调用,因此也称为仿函数

  • 仿函数没有固定写法,非常灵活

#include <iostream>using namespace std;class Person{
public:// 打印类仿函数void operator()(string text) {cout << text << endl;}
};class MyAdd{
public:// 加法类仿函数int operator()(int num1, int num2) {return num1+num2;}
};void test(){Person p;// 由于使用起来非常类似于函数调用,因此也称为仿函数p("123");
}void test1(){MyAdd myAdd;cout << myAdd(1,2) << endl;// 使用匿名函数调用cout <<MyAdd()(100,10) << endl;
}int main(){test();test1();return 0;
}
http://www.yayakq.cn/news/575109/

相关文章:

  • 免费写作网站怎么 网站 wordpress
  • 绍兴酒店网站建设wordpress+dux5.0
  • dede网站架设教程做百度推广一个月多少钱
  • 建设部网站投诉如何注册济南智能网站建设
  • 网站这么设置微信支付宝好用的推广平台
  • 太原网站建设信息推荐企业内部网站建设
  • 响应式网站是个坑产品网站免费模板下载
  • 创可贴app海报制作网站产品经理兼职做网站报酬
  • 深圳网站备案注销网站域名是不是网址
  • frontpage可以做网站吗做app和做网站那个难
  • 建站平台系统wordpress类似
  • 启迪网站开发上海seo公司排名
  • 网站建设零金手指专业烟台网站搜索优化
  • 设计名字的网站广州市白云区建设局 网站
  • 查询建设用地规划许可证在哪个网站网站支付宝网上支付功能怎么做
  • 网站建设时间、人力及成本估算网站有哪些费用多少钱
  • 网站开发最快的语言全国设计大赛官网
  • 建站必须要域名吗手机网站被禁止访问怎么打开
  • 小企业网站建设厂家有哪些wordpress页面重定向
  • 河源公司做网站跟网站开发有关系的工作有哪些
  • 网站后台发邮件旅游网站源码 wordpress模板 v1.0
  • 网站自动更新关于新品牌的营销策划
  • 贵州西能电力建设有限公司网站做一个网站只做前端怎么做
  • 网站建设三站合一工业设计公司属于什么行业
  • 广州个人网站制作公司龙岩公司注册流程
  • 怎么查看网站是否备案深圳互联网科技有限公司
  • 安丘网站建设报价美橙智能网站
  • 如何查公司网站开发时间没有网站域名备案
  • 网站设置关键词做宣传可以在哪些网站上发布
  • 商城网站方案wordpress设置背景图片