#include <iostream>
#include <cstring>
using namespace std;
class Book
{
private:
int _id;
char* _name;
float _price;
static int nowid;
int _bookCount{1};
public :
Book(int id, char* name, float price)
: _id(id)
, _price(price)
{
int nameLen = strlen(name);
_name = new char[nameLen + 1];
strcpy(_name, name);
}
Book(char* name, float price):Book(nowid,name,price){
nowid++;
}
~Book()
{
delete[] _name;
}
friend const Book& operator +(const Book& leftBook,const Book& rightBook){
if (strcmp (rightBook._name,leftBook._name) == 0) {
Book *book=new Book(rightBook._name, rightBook._price);
book->_bookCount=leftBook._bookCount+rightBook._bookCount;
return *book;
}
else{
return leftBook;
}
}
friend const Book& operator -(const Book& leftBook,const Book& rightBook){
if (strcmp (rightBook._name,leftBook._name) == 0) {
Book *book=new Book(rightBook._name, rightBook._price);
book->_bookCount=leftBook._bookCount-rightBook._bookCount;
if ( book->_bookCount<0) book->_bookCount=0;
return *book;
}
else{
return leftBook;
}
}
Book& operator -=(const Book& otherBook){
if (strcmp (otherBook._name,_name) == 0) {
_bookCount-=otherBook._bookCount;
if ( _bookCount<0) _bookCount=0;
return *this;
}
else{
return *this;
}
}
Book& operator +=(const Book& otherBook){
if (strcmp (otherBook._name,_name) == 0) {
_bookCount+=otherBook._bookCount;
return *this;
}
else{
return *this;
}
}
void print(){
cout<<_id<<","<<_name<<","<<_price<<"==>"<< _bookCount<<endl;
}
void printCount(){
cout<<_name<<":"<<_price<<"==>"<< _bookCount<<endl;
}
};
int Book::nowid{0};
int main(int argc, char **argv)
{
Book *book1=new Book("精通C++", 52.17);
Book *book2=new Book("精通C++", 52.17);
book1->print();
*book1=*book1+*book2;
book1->printCount();
*book1+=*book2;
book1->printCount();
*book1+=*book2;
book1->printCount();
*book1-=*book2;
book1->printCount();
*book1=*book1-*book2;
book1->printCount();
}
0,精通C++,52.17==>1
精通C++:52.17==>2
精通C++:52.17==>3
精通C++:52.17==>4
精通C++:52.17==>3
精通C++:52.17==>2
Hit any key to continue...