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

一个虚拟主机做2个网站网页设计培训学校

一个虚拟主机做2个网站,网页设计培训学校,优秀网络小说推荐,网站规划网站建设报价表文章目录 运算符重载加号运算符重载成员函数实现运算符重载全局函数实现运算符重载全局函数实现函数重载 左移运算符重载递增运算符重载赋值运算符重载关系运算符重载函数调用运算符重载 运算符重载 对已有的运算符重新进行定义,赋予其另一种功能,以适应…

文章目录

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

运算符重载

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

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

  • 不要滥用运算符重载

加号运算符重载

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

成员函数实现运算符重载

  • 成员函数实现运算符重载的本质 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.15wanjia.com/news/17723.html

相关文章:

  • 潍坊网站建设SEO优化熊掌号北京培训学校
  • 水果网站策划书seo提供服务
  • 河北建设工程新希望关键词快速排名seo怎么优化
  • 如何做网站源码账号权重查询
  • 深圳网站制作百度首页广告多少钱
  • 合肥网站制作软件网络舆情分析报告模板
  • 中文编程做网站seo网站优化工具
  • 怎么做兼职网站我想做百度推广
  • 苹果CMS如何做视频网站搜狗网址导航
  • 凡科网电脑版怎么做网站上海最专业的seo公司
  • 玉环做企业网站佛山做网络优化的公司
  • 做会员卡的网站在线cpc广告点击日结联盟
  • 如何用网站做课件seo综合查询工具有什么功能
  • 手机模板网站生成制作软件线上营销活动案例
  • 没有后台的网站怎么做排名百度云资源搜索平台
  • 网站的黄金看盘软件aso优化排名违法吗
  • www开头网站怎么做东莞谷歌推广公司
  • o2o网站建设咨询温州seo结算
  • 南京网站设南京网站设计计做百度seo
  • 建个大型网站要多少钱百度客服电话人工服务热线电话
  • 自己做的网站显示不出来推客平台
  • 个人资料库网站怎么做百度seo学院
  • 网站备案域名还是空间百度云搜索引擎入口百度网盘
  • 武汉做网站公司hlbzx谷歌外贸网站推广
  • 深圳网络建设网站手机网页制作
  • 企业英文网站百度学术免费查重入口
  • php网站建设模板下载seo全网图文推广
  • wordpress建博客网站吗怎么投放网络广告
  • 重庆网网站建设公司网站优化招聘
  • 关键词广告北京外包seo公司