朔州网站建设收费多少,住房城乡建设部网站合同示范,拖拽建设网站源码,电子产品网站建设策划方案目录
1.运算符重载概念
2.加号运算符重载 通过全局函数重载
代码示例#xff1a;
3.左移运算符重载
代码示例#xff1a;
4.递增运算符重载
代码示例#xff1a;
5.赋值运算符重载
深拷贝
代码示例#xff1a;
6.关系运算符重载
代码示例#xff1a;
7.函…目录
1.运算符重载概念
2.加号运算符重载 通过全局函数重载
代码示例
3.左移运算符重载
代码示例
4.递增运算符重载
代码示例
5.赋值运算符重载
深拷贝
代码示例
6.关系运算符重载
代码示例
7.函数调用运算符重载
匿名函数对象 1.运算符重载概念 2.加号运算符重载 比方说有一个名称为person的类里面有m_A和m_B这两个成员
我们想实现它们相加的操作可以写这样一个函数 我们只需要将函数名替换为operator
就可以对加号运算符进行重载简化代码 也可以通过全局函数重载 通过全局函数重载 代码示例
#includebits/stdc.h
using namespace std;class person
{
public://成员函数重载运算符// person operator(person p)// {// person temp;// temp.a this - a p.a;// temp.b this - b p.b;// return temp;// }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;
}int main()
{person p1;p1.a 5;p1.b 10;person p2;p2.a 3;p2.b 9;person p3 p1 p2;cout p3.a endl;cout p3.b endl;return 0;
} 3.左移运算符重载 如果要输出私有成员可以配合友元
只能用全局函数进行重载
cout是标准输出流对象ostream
代码示例
#includebits/stdc.h
using namespace std;class person
{
public://成员函数重载int a;int b;
};//全局函数重载
ostream operator(ostream cout,person p){cout p.a endl;cout p.b endl;return cout;
}int main()
{person p;p.a 5;p.b 10;cout p endl;return 0;
} 4.递增运算符重载
cout a是先让a加一再执行这个表达式
cout a是先执行这个表达式再让a加一 代码示例
#includebits/stdc.h
using namespace std;class integer
{
public:integer(){num 0;}//重载前置运算符//返回引用是为了一直对一个数据进行递增操作integer operator(){num;return *this;}//重载后置运算符//int是一个占位参数//可以用于区分前置和后置递增integer operator(int){integer temp *this;num;return temp;}int num;
};//后面的i前面不用不然写in的时候会报错
//因为返回的是temptemp是局部变量
ostream operator(ostream cout,integer i){cout i.num endl;return cout;
}int main(){integer i;cout (i) endl;integer in;cout in endl;cout in endl;return 0;
} 5.赋值运算符重载 深拷贝
这里涉及到深浅拷贝的问题
不懂的可以看http://t.csdnimg.cn/FHNI4 代码示例
#includebits/stdc.h
using namespace std;class person
{
public:person(int a){age new int(a);}~person(){if(age ! NULL){delete age;age NULL;}}//返回引用才是它真正的自身person operator(person p){//编译器提供的是浅拷贝//age p.age;//应该先判断是否有属性在堆区//如果有先释放干净//再进行深拷贝if(age ! NULL){delete age;age NULL;}age new int(*p.age);return *this;}int *age;
};int main()
{person p1(18);person p2(20);person p3(22);p3 p2 p1;cout *p1.age endl;cout *p2.age endl;cout *p3.age endl;return 0;
} 6.关系运算符重载 代码示例
#includebits/stdc.h
using namespace std;class person
{
public:person(string name,int age){this - name name;this - age age;}bool operator(person p){if(this - name p.name this - age p.age)return true;elsereturn false;}string name;int age;
};int main()
{person p1(xiaoming,18);person p2(xiaoming,18);if(p1 p1){cout p1与p2相等 endl;}return 0;
} 7.函数调用运算符重载 匿名函数对象
特点为当前行执行完后立即被释放
int main()
{test p;p(hello world);p(5,6);//匿名函数对象test()(hello world !!!);test()(7,9);return 0;
}
代码示例
#includebits/stdc.h
using namespace std;class test
{
public:void operator()(string test){cout test endl;}void operator()(int a,int b){cout ab endl;}};int main()
{test p;p(hello world);p(5,6);//匿名函数对象test()(hello world !!!);test()(7,9);return 0;
}