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
原创粉丝点击