c++17(15)-operator==,!=

#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 (leftBook==rightBook) {
            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 (leftBook==rightBook) {
            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 (*this==otherBook) {
            _bookCount-=otherBook._bookCount;
            if ( _bookCount<0) _bookCount=0;
            return *this;
        }
        else{
            return *this;
        }        
    }      
    Book& operator +=(const Book& otherBook){
        if (*this==otherBook) {
            _bookCount+=otherBook._bookCount;
            return *this;
        }
        else{
            return *this;
        }        
    }    
    friend const bool operator ==(const Book& leftBook,const Book& rightBook){
        if (strcmp (rightBook._name,leftBook._name) == 0 && rightBook._price==leftBook._price) {
            return true;
        }
        else{
            return false;
        }        
    } 
    friend  const bool operator !=(const Book& leftBook,const Book& rightBook){
        if (strcmp (rightBook._name,leftBook._name) == 0 && rightBook._price==leftBook._price) {
            return false;
        }
        else{
            return true;
        }        
    }    
    void print(){
        cout<<_id<<","<<_name<<","<<_price<<"==>"<< _bookCount<<endl;
    }
    void printCount(){
         cout<<_name<<":"<<_price<<"==>"<< _bookCount<<endl;       
    }
};
int Book::nowid{0};//static在类外初始化
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...
发布了385 篇原创文章 · 获赞 13 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/AI_LX/article/details/104463149