c++ operator重载 使用
来源:互联网 发布:建筑器材租赁软件 编辑:程序博客网 时间:2024/06/02 02:11
operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将operator=整体上视为一个函数名。
这是C++扩展运算符功能的方法,虽然样子古怪,但也可以理解:一方面要使运算符的使用方法与其原来一致,另一方面扩展其功能只能通过函数的方式(c++中,“功能”都是由函数实现的)。
一、为什么使用操作符重载?
对于系统的所有操作符,一般情况下,只支持基本数据类型和标准库中提供的class,对于用户自己定义的class,如果想支持基本操作,比如比较大小,判断是否相等,等等,则需要用户自己来定义关于这个操作符的具体实现。比如,判断两个人是否一样大,我们默认的规则是按照其年龄来比较,所以,在设计person 这个class的时候,我们需要考虑操作符==,而且,根据刚才的分析,比较的依据应该是age。那么为什么叫重载呢?这是因为,在编译器实现的时候,已经为我们提供了这个操作符的基本数据类型实现版本,但是现在他的操作数变成了用户定义的数据类型class,所以,需要用户自己来提供该参数版本的实现。
一些例子
#include <QCoreApplication>#include <opencv2/opencv.hpp>#include <opencv2/opencv_modules.hpp>using namespace std;class Child{public: int age; int length; int sex;};class Person{public: int age; int length;public: Person() { this->age = 0; this->length = 0; } operator Child(); inline bool operator == (const Person &ps) const; inline Person operator + (const Person &ps) const; inline Person operator () (const int _age, const int _length) const; inline Person operator [] (const int _age) const;};Person::operator Child(){ Child child; child.age = this->age; child.length = this->length; return child;}bool Person::operator == (const Person &ps) const{ if ((this->age == ps.age) && (this->length == ps.length)) { return true; } return false;}Person Person::operator + (const Person &ps) const{ Person person; person.age = this->age + ps.age; person.length = this->length + ps.length; return person;}Person Person::operator () (const int _age, const int _length) const{ Person person; person.age = this->age + _age; person.length = this->length + _length; return person;}Person Person::operator [] (const int _age) const{ Person person; person.age = _age; person.length = 0; return person;}int main(int argc, char *argv[]){ QCoreApplication a(argc, argv); Person personJim; Person personGreen; // operator type change personJim.age = 10; personJim.length = 150; Child childJim = personJim; cout << "operator type" <<endl; cout << "personJim age "<<personJim.age <<" lenght "<< personJim.length<<endl; cout << "childJim age "<<childJim.age <<" lenght "<< childJim.length<<endl; // operator = personJim.age = 10; personJim.length = 150; personGreen.age = 20; personGreen.length = 180; cout << "operator ==" <<endl; cout << "personJim age "<<personJim.age <<" lenght "<< personJim.length<<endl; cout << "personGreen age "<<personGreen.age <<" lenght "<< personGreen.length<<endl; personJim = personGreen; cout << "personJim age "<<personJim.age <<" lenght "<< personJim.length<<endl; cout << "personGreen age "<<personGreen.age <<" lenght "<< personGreen.length<<endl; // operator + personJim.age = 10; personJim.length = 150; personGreen.age = 20; personGreen.length = 180; cout << "operator +" <<endl; cout << "personJim age "<<personJim.age <<" lenght "<< personJim.length<<endl; cout << "personGreen age "<<personGreen.age <<" lenght "<< personGreen.length<<endl; personJim = personJim + personGreen; cout << "personJim age "<<personJim.age <<" lenght "<< personJim.length<<endl; cout << "personGreen age "<<personGreen.age <<" lenght "<< personGreen.length<<endl; // operator == personJim.age = 10; personJim.length = 150; personGreen.age = 10; personGreen.length = 180; cout << "operator +" <<endl; cout << "personJim age "<<personJim.age <<" lenght "<< personJim.length<<endl; cout << "personGreen age "<<personGreen.age <<" lenght "<< personGreen.length<<endl; if (personJim == personGreen) { cout << "personJim == personGreen" <<endl; } else { cout << "personJim != personGreen" <<endl; } // operator () personJim.age = 10; personJim.length = 150; cout << "operator ()" <<endl; cout << "personJim age "<<personJim.age <<" lenght "<< personJim.length<<endl; Person personTom = personJim(100, 200); cout << "personTom age "<<personTom.age <<" lenght "<< personTom.length<<endl; // operator [] personJim.age = 10; personJim.length = 150; cout << "operator []" <<endl; cout << "personJim age "<<personJim.age <<" lenght "<< personJim.length<<endl; personTom = personJim[20]; cout << "personTom age "<<personTom.age <<" lenght "<< personTom.length<<endl; return a.exec();}
0 0
- C++operator重载问题
- [C++]operator--重载
- c++---operator重载++,--
- c++ operator重载 使用
- 奇怪的C++operator重载
- C++(7) 函数重载/operator
- 2.c++-重载运算符operator
- C++,重载输出操作符<<, cout.operator()
- 【C++】operator关键字(重载操作符)
- 重载Operator ++
- operator++ 重载
- operator << >>重载
- operator重载
- operator <<重载
- 重载数组下标操作符,使用operator
- 重载数组下标操作符,使用operator
- C/C++——operator new 重载 & 单例模式
- 运算符重载 编程题#3(专项课程3;重载:* operator, & operator=, & operator(); 函数 memcpy 的使用)
- 二叉树的算法实现
- C++里面cout.width(4)是什么意思?
- 学好机器学习必会的统计学知识(第一篇)
- 零碎知识之:onclick="retrun 函数"与onclick="函数"的区别
- JavaScript动态创建标记的方法
- c++ operator重载 使用
- hdu 2023 亲和串 --(使用strstr(),strcpy(),strcat()函数)
- 每日一linux命令(3)-------pwd
- Linux系统安装gcc/g++详细过程
- unity多线程
- 【黑马Android】(11)音乐播放器/视频播放器/照相机/常见对话框/notification通知/样式和主题/帧动画/传感器/应用程序反编译与安装
- leetcode.93. Restore IP Addresses
- Sicily1344——数列
- c++实验6-数组合并