c++ operator重载 使用
2016-05-24 21:35
399 查看
operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将operator=整体上视为一个函数名。
这是C++扩展运算符功能的方法,虽然样子古怪,但也可以理解:一方面要使运算符的使用方法与其原来一致,另一方面扩展其功能只能通过函数的方式(c++中,“功能”都是由函数实现的)。
一、为什么使用操作符重载?
对于系统的所有操作符,一般情况下,只支持基本数据类型和标准库中提供的class,对于用户自己定义的class,如果想支持基本操作,比如比较大小,判断是否相等,等等,则需要用户自己来定义关于这个操作符的具体实现。比如,判断两个人是否一样大,我们默认的规则是按照其年龄来比较,所以,在设计person 这个class的时候,我们需要考虑操作符==,而且,根据刚才的分析,比较的依据应该是age。那么为什么叫重载呢?这是因为,在编译器实现的时候,已经为我们提供了这个操作符的基本数据类型实现版本,但是现在他的操作数变成了用户定义的数据类型class,所以,需要用户自己来提供该参数版本的实现。
一些例子
这是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(); }
相关文章推荐
- C++第六次实验
- C++ operator关键字(重载操作符)
- C++第6次作业
- C++ 内存分配(new,operator new)详解
- C++中拼接一个包含整型等类型字符串的方法
- c++第六次作业
- C++第6次实验(数组操作)
- C++中范围for语句
- C语言字符串函数和C++string类中的部分函数的使用
- c++实验6-数组合并
- c语言小项目----注释转换
- C++中范围for语句
- C++里面cout.width(4)是什么意思?
- C++中数据值为-1.#IND000000000000
- c++第六次实验——数组合并
- 以良好的方式编写C++ class
- 建立二叉树
- C++版本的C标准库头文件的特点
- C++版本的C标准库头文件的特点
- C++ Socket编程之小试牛刀