Проблема с перегрузкой оператора --. (В одной книге по одному реализовано, а в другой - по другому Как правильно ?
(т.е. как я понял ,если написать ----fff то должна быть ошибка)
| Код | CClient&operator --(); ... CClient&CClient::operator --() { *this=m_nAccountCount-1; return *this; } main(){ ... CClient fff; --fff; ...
|
весь код:
| Код | class CAccount { public: CAccount(); CAccount(int x); ~CAccount(); void InputData(); void OutputData(); friend CAccount operator+(const CAccount &a, const CAccount &b); friend CAccount operator-(const CAccount &a, const CAccount &b); friend CAccount operator*(const CAccount &a, const CAccount &b); friend CAccount operator/(const CAccount &a, const CAccount &b); int getSalary() { return m_nValue; } private: int m_nID; int m_nValue; }; CAccount::CAccount():m_nID(-1),m_nValue(-1){} CAccount::~CAccount(){} void CAccount::InputData() { cout<<" Enter account ID:"; cin>>m_nID; cout<<" Enter account value:"; cin>>m_nValue; } void CAccount::OutputData() { cout<<" account ID:" << m_nID <<" , Account Value: "<<m_nValue << endl; } CAccount::CAccount(int x) { m_nID=x; } CAccount operator+(const CAccount &a, const CAccount &b) { CAccount tmp(a); tmp.m_nID += b.m_nID; return tmp; } CAccount operator-(const CAccount &a, const CAccount &b) { CAccount tmp(a); tmp.m_nID -= b.m_nID; return tmp; } CAccount operator*(const CAccount &a, const CAccount &b) { CAccount tmp(a); tmp.m_nID *= b.m_nID; return tmp; } CAccount operator/(const CAccount &a, const CAccount &b) { CAccount tmp(a); tmp.m_nID /= b.m_nID; return tmp; }
class CClient { public: CClient(); CClient(char *); ~CClient(); void InputData(); void OutputData(); friend int getSalary(CClient &client, char * line); friend ostream& operator<<(ostream& os, const CClient& dt); CClient&operator --(); private: char *m_szName; CAccount *m_pAccounts; int m_nAccountCount; }; CClient::CClient() { m_nAccountCount=0; m_pAccounts=NULL; m_szName=NULL; } void CClient::InputData() { m_szName=new char[33]; cout<<" input name:"<<endl; cin>>m_szName; cout<<" input amount of values:"<<endl; cin>>m_nAccountCount; m_pAccounts=new CAccount[m_nAccountCount]; for(int i=0;i<m_nAccountCount;i++) { cout<<"enter["<<i<<"]account:"<<endl; m_pAccounts[i].InputData(); } } void CClient::OutputData() { cout<<" name: "<<m_szName<<endl; cout<<" accounts:"<<endl; for(int i=0;i<m_nAccountCount;i++) { m_pAccounts[i].OutputData(); } } CClient::~CClient() { delete []m_pAccounts; delete []m_szName; } CClient::CClient(char *name) { m_szName=new char[33]; strcpy(m_szName,name); } ostream& operator<<(ostream& os, const CClient& dt) { os<<dt.m_szName<<endl; return os; } int getSalary(CClient & client, char * line) { if(strcmp(line,client.m_szName))return 0; int m_nValue = 0; for(int i = 0; i<client.m_nAccountCount; i++) m_nValue += client.m_pAccounts[i].getSalary(); return m_nValue; } CClient&CClient::operator --() { *this=m_nAccountCount-1; return *this; }
class CBank { public: CBank(); ~CBank(); void InputData(); void OutputData(); void ShowSalary(); private: char *szName; CClient *m_pClients; int m_nClientCount; }; CBank::CBank() { szName=NULL; m_pClients=NULL; m_nClientCount=0; } void CBank::InputData() { szName=new char [33]; cout<<" input bank name:"<<endl; cin>>szName;
cout<<" sizeof:"<<endl; cin>>m_nClientCount; m_pClients=new CClient[m_nClientCount]; for(int i=0;i<m_nClientCount;i++) { m_pClients[i].InputData(); } } void CBank::OutputData() { cout<<"bank name: "<<szName<<endl; for(int i=0;i<m_nClientCount;i++) { m_pClients[i].OutputData(); } } void CBank::ShowSalary() { char line[22]; std::cout<<" input name:"<<std::endl; std::cin>>line; int m_nValue=0; for(int i = 0; i<m_nClientCount; i++) m_nValue += getSalary(m_pClients[i], line); std::cout<<"\n"<<m_nValue<<std::endl; } CBank::~CBank() { delete []m_pClients; delete []szName; } void main() { CBank bank; cout<<"---Reading bank information---"<<endl; bank.InputData(); system("cls"); cout<<"---Reading bank information---"<<endl; bank.OutputData(); bank.ShowSalary(); system("PAUSE"); system("cls");
cout<<"+,- i t.d. "<<endl; CAccount k,b(22),c(3); k=b+c; k.OutputData(); k=b-c; k.OutputData(); k=b*c; k.OutputData(); k=b/c; k.OutputData(); CClient fff; --fff; system("PAUSE"); }
|
|