针对重载操作符需要注意的地方很多,具体可以见c++ Primer或网上其他帖子,这些都需要理解性记忆,下面实例只作为解释什么是重载操作符。
#include <iostream>
using namespace std;
class person{
private:
int age;
public:
person(int a){
this->age=a;
}
inline bool operator == (const person &ps) const;
};
inline bool person::operator==(const person &ps) const
{
if (this->age==ps.age)
return true;
return false;
}
int main()
{
person p1(20);
person p2(20);
if(p1==p2) cout<<"the age is equal!"<<endl;
return 0;
}
输出:
pateo@pateo-B86N53X:~/work/study$ g++ main.cc -o main
pateo@pateo-B86N53X:~/work/study$ ./main
the age is equal!
pateo@pateo-B86N53X:~/work/study$
#include <iostream>
using namespace std;
class person
{
public:
int age;
};
bool operator==(person const &p1 ,person const & p2)
{
if(p1.age==p2.age)
return true;
return false;
}
int main()
{
person rose;
person jack;
rose.age=18;
jack.age=18;
if(rose==jack)
cout<<"ok"<<endl;
return 0;
}
输出:
pateo@pateo-B86N53X:~/work/study$ g++ main.cc -o main
pateo@pateo-B86N53X:~/work/study$ ./main
ok
pateo@pateo-B86N53X:~/work/study$
#include <iostream>
using namespace std;
class person{
private:
int age;
public:
person(int a){
this->age=a;
}
friend bool operator == ( person &p1,person &p2) ;
};
bool operator==(person &p1,person &p2)
{
if (p1.age==p2.age)
return true;
return false;
}
int main()
{
person p1(18);
person p2(20);
if(p1==p2) cout<<"the age is equal!"<<endl;
cout<<"the age is not equal!"<<endl;
return 0;
}
输出:
pateo@pateo-B86N53X:~/work/study$ g++ main.cc -o main
pateo@pateo-B86N53X:~/work/study$ ./main
the age is not equal!
pateo@pateo-B86N53X:~/work/study$
#include <iostream>
using namespace std;
class person{
private:
int age;
public:
person(){}
person(int a){
this->age=a;
}
person& operator = ( person &p) ;
int getAge(){return age;}
};
person& person::operator = (person &p)
{
age=p.age;
cout<<"Assignment operator called.\n";
return *this;
}
int main()
{
person p1(18);
person p2;
p2 = p1;
cout<<p2.getAge()<<endl;
return 0;
}
输出:
pateo@pateo-B86N53X:~/work/study$
pateo@pateo-B86N53X:~/work/study$ g++ main.cc -o main
pateo@pateo-B86N53X:~/work/study$ ./main
Assignment operator called.
18
pateo@pateo-B86N53X:~/work/study$
#include <iostream>
using namespace std;
class person{
private:
int age;
public:
person(){}
person(int a){
this->age=a;
}
friend bool operator == ( person &p1,person &p2) ;
friend istream& operator >> (istream&,person&);
friend ostream& operator << (ostream&,const person&);
void print()
{
cout << "age=" << age << endl;
}
};
bool operator==(person &p1,person &p2)
{
if (p1.age==p2.age)
return true;
return false;
}
ostream& operator << (ostream &out,const person &p)
{
out << p.age << endl;
return out;
}
istream& operator >> (istream& in,person &p)
{
in >> p.age;
if(!in)
cerr << "Wrong input!" << endl;
return in;
}
int main()
{
person liaojianguo;
cin >> liaojianguo;
cout << liaojianguo;
return 0;
}
输出:
pateo@pateo-B86N53X:~/work/study$
pateo@pateo-B86N53X:~/work/study$ g++ main.cc -o main
pateo@pateo-B86N53X:~/work/study$ ./main
28
28
pateo@pateo-B86N53X:~/work/study$
#include <iostream>
using namespace std;
class person{
private:
int age;
public:
person(){}
person(int a){
this->age=a;
}
int operator + (int nAdd)
{
return age + nAdd;
}
};
int main()
{
person liaojianguo(28);
cout << liaojianguo+1 << endl;
return 0;
}
输出:
pateo@pateo-B86N53X:~/work/study$
pateo@pateo-B86N53X:~/work/study$ g++ main.cc -o main
pateo@pateo-B86N53X:~/work/study$ ./main
29
pateo@pateo-B86N53X:~/work/study$
#include <iostream>
using namespace std;
class person{
private:
int age;
public:
person(){}
person(int a){
this->age=a;
}
int getAge(){return age;}
person operator ++ (int)
{
person pTemp = *this;
++age;
return pTemp;
}
person& operator ++ ()
{
++age;
return *this;
}
};
int main()
{
person liaojianguo(28);
liaojianguo++;
cout << "liaojianguo++ = " << liaojianguo.getAge() << endl;
++liaojianguo;
cout << "++liaojianguo = " << liaojianguo.getAge() << endl;
return 0;
}
输出:
pateo@pateo-B86N53X:~/work/study$
pateo@pateo-B86N53X:~/work/study$ g++ main.cc -o main
pateo@pateo-B86N53X:~/work/study$ ./main
liaojianguo++ = 29
++liaojianguo = 30
pateo@pateo-B86N53X:~/work/study$
#include <iostream>
using namespace std;
using std::string;
class person{
private:
int age;
string child[2];
public:
person(string x, string y) {
child[0] = x;
child[1] = y;
}
person(){}
int getAge(){return age;}
string &operator[](int &i) { return *(child + i); }
const string &operator[](const int &i) { return *(child + i); }
};
int main()
{
person ob("body","girl");
cout << ob[1] << endl;
return 0;
}
输出:
pateo@pateo-B86N53X:~/work/study$ g++ main.cc -o main
pateo@pateo-B86N53X:~/work/study$ ./main
girl
pateo@pateo-B86N53X:~/work/study$