重载操作符的定义
#include <iostream>
using namespace std;
class Person
{
public:
void operator+(const Person& lhs)
{
cout << "执行了重载的加法操作" << endl;
}
};
int main()
{
Person p1, p2;
p1 + p2;
return 0;
}
重载输入输出操作符
- 输出操作符 << 重载
- 输入操作符 >> 重载
重载输入操作符时要考虑输入错误的情况
#include <iostream>
#include <string>
using namespace std;
class Sales_item
{
friend ostream& operator<<(ostream& out, const Sales_item& s);
friend istream& operator>>(istream& in, Sales_item& s);
public:
Sales_item(string &book, unsigned units, double price):
isbn(book),units_sold(units),revenue(price * units){}
Sales_item():units_sold(0), revenue(0.0){}
private:
string isbn;
unsigned units_sold;
double revenue;
};
ostream& operator<<(ostream& out, const Sales_item& s)
{
out << s.isbn << "\t" << s.units_sold << "\t" << s.revenue;
return out;
}
istream& operator >>(istream& in, Sales_item& s)
{
double price;
in >> s.isbn >> s.units_sold >> price;
if(in)
s.revenue = s.units_sold * price;
else
s = Sales_item();
return in;
}
int main()
{
Dog a;
int b;
string isbn1 = "0-201-78345-X";
Sales_item item(isbn1 , 2, 25.00);
cout << "hello" << endl;
cout << item << endl;
cin >> item;
cout << item << endl;
return 0;
}
算数操作符重载
#include <iostream>
using namespace std;
class Sales_item
{
public:
Sales_item(const std::string book,const unsigned units, const double amount):
isbn(book),
units_sold(units),
revenue(amount){};
Sales_item& operator+=(const Sales_item&);
Sales_item& operator-=(const Sales_item&);
friend std::ostream& operator<<(std::ostream&, const Sales_item&);
private:
std::string isbn;
unsigned units_sold;
double revenue;
};
Sales_item operator+(const Sales_item&, const Sales_item&);
Sales_item operator-(const Sales_item&, const Sales_item&);
Sales_item& Sales_item::operator+=(const Sales_item& rhs)
{
units_sold += rhs.units_sold;
revenue += rhs.revenue;
return *this;
}
Sales_item operator+(const Sales_item& lhs, const Sales_item& rhs)
{
Sales_item ret(lhs);
ret += rhs;
return ret;
}
std::ostream& operator<<(std::ostream& out, const Sales_item& s){
out << s.isbn << "\t" << s.units_sold << "\t" << s.revenue;
}
Sales_item& Sales_item::operator-=(const Sales_item& rhs)
{
this->units_sold -= rhs.units_sold;
this->revenue -= rhs.revenue;
return *this;
}
Sales_item operator-(const Sales_item& lhs, const Sales_item& rhs)
{
Sales_item ret(lhs);
ret -= rhs;
return ret;
}
int main()
{
Sales_item item1(string("0-201-12345-X"), 10, 120.0);
Sales_item item2(string("0-201-12345-X"), 20, 200.0);
Sales_item result = item1 + item2;
cout << result << endl;
Sales_item item3(string("0-201-12345-X"), 5, 70.0);
result += item3;
cout << result << endl;
result -= item2;
cout << result << endl;
result = item2 - item1;
cout << result << endl;
cout << "test" << endl;
return 0;
}
关系操作符重载
#include <iostream>
#include <stdlib.h>
using namespace std;
class Date
{
private:
int month, day, year;
public:
Date(int m=0, int d=0, int y=0):month(m),day(d),year(y)
{};
int operator==(Date & dt) const;
int operator!=(Date & dt) const;
int operator<=(Date & dt) const;
int operator>(Date & dt) const;
};
int Date::operator==(Date& dt) const
{
return (this->month == dt.month)
&& (this->day == dt.day)
&& (this->year == dt.year);
}
int Date::operator!=(Date& dt) const
{
return !(*this == dt);
}
int Date::operator<(Date& dt) const
{
if (this->year == dt.year)
{
if (this->month == dt.month)
return this->day < dt.day;
return this->month < dt.month;
}
return this->year < dt.year;
}
int main()
{
Date d1(2, 14, 2005);
Date d2(6, 19, 2005);
Date d3(2, 14, 2005);
if (d1 < d2)
cout << "d1 < d2" << endl;
if (d1 == d3)
cout << "d1 = d3" << endl;
cout << "test" << endl;
return 0;
}
自增自减重载
#include <iostream>
#include <cstring>
using namespace std;
class String
{
public:
String(char const *chars = "");
String(String const &str);
~String();
void display() const;
String &operator++();
String const &operator++(int);
String &operator--();
String const &operator--(int);
private:
char *ptrChars;
};
String &String::operator++()
{
for(std::size_t i=0; i<std::strlen(ptrChars); ++i)
{
++ptrChars[i];
}
return *this;
}
String const &String::operator++(int)
{
String ©(*this);
++(*this);
return copy;
}
String::String(char const *chars)
{
chars = chars ? chars: "";
ptrChars = new char[std::strlen(chars) + 1];
std::strcpy(ptrChars, chars);
}
String::String(String const &str)
{
ptrChars = new char[std::strlen(str.ptrChars)+1];
std::strcpy(ptrChars, str.ptrChars);
}
String::~String()
{
delete[] ptrChars;
}
void String::display() const
{
cout << ptrChars << endl;
}
int main()
{
String str1("ABC");
str1.display();
String str2(++str1);
str2.display();
str1.display();
String str3(str1++);
str3.display();
str1.display();
cout << "test" << endl;
return 0;
}