簡體   English   中英

如何比較同一類的兩個對象?

[英]How to compare two objects of the same class?

我正在用C ++制作銀行管理系統。 我有Visual Studio2008。請參見下面的代碼,我將解釋我的問題。

class ACCOUNT
{
int accno,deposit;
char name[20];
char type;
public:
int create_account()
{
    //The whole process of accepting details from user goes here/
}
int retacc() //Accessor Function
{
    return accno;
}
void write_account()
{
ACCOUNT acc1,acc2;
char ch='Y';
fstream rec;
rec.open("d://useless.dat",ios::out|ios::in|ios::app|ios::binary);
c:
acc1.create_account();
rec.seekg(0);
while(!rec.eof())
{
    rec.read((char*)&acc2,sizeof(acc2));
    if(acc1.retacc()==acc2.retacc()) //THIS IS WHERE I AM DOING THE COMPARING PART. IS THIS THE WRONG WAY TO DO IT?
    {
        cout<<"\nAccount No. already exist.";
        cout<<"Want to enter again? (Y/N) : ";
        cin>>ch;
        ch=toupper(ch);
        if(ch=='Y')
            goto c;
    }   
}
rec.write((char*)&acc1,sizeof(acc1));
rec.close();
cout<<"\nCongratulations! Your account is created.\n\n";
}

我要在這里做的是,當用戶輸入帳號時,將發送該帳號以檢查是否有另一個具有相同帳號的記錄。 文件是否存在useless.dat 因此,我制作了該類的兩個實例。 一種用於從用戶獲取數據,另一種用於讀取文件。 然后,比較它們,如果有一些記錄具有相同的帳號。 那么用戶必須輸入另一個數字,如果不是,則將用戶給出的詳細信息寫入文件中。

您可能要考慮的一種方法是創建一個靜態方法來從文件加載數據(而不是使它成為account對象上的實例方法)。 每個帳號對應一個Account對象,因此在加載數據時,請使用每個帳號創建一個Account對象。 將這些Account對象存儲在數據結構(例如Vector)中。

然后,要確定是否已經存在一個帳號,您只需在向量上進行迭代,檢查該帳號是否與現有號碼相對應。 如果是這樣,則您拒絕輸入並重復直到輸入有效的帳號為止。

也就是說,@ asawyer在他對安全性問題的評論中絕對正確。 您確定用戶應該提供自己的帳號嗎? 通常,這將由銀行處理,並且當用戶創建用戶帳戶時,只會為其分配一個帳號。 同樣,這對於您的任務來說可能是過大的,但是根據您的教授為您提供的指導原則可以忽略。

編輯:一些偽代碼可以幫助您理解

class Account
{
    Account(acctNumber);
    retacc();
    write_account();

    static load_accounts() {
        for each acctNumber A in file
            storageVector->push(A)
        end
    }
    static account_exists(Account account) {
        for each acctNumber A in storageVector {
             if  account->retacc() == A->retacc() {
                 return true
             }
        }
        return false;
    }
}

通常的想法是將所有帳號加載到其中,並將其存儲到Vector容器中,然后僅對該容器進行迭代以查看您要查找的值是否已經存在。

這只是偽代碼,但足以讓您了解如何從此處開始。 祝好運!

您可以在C ++中聲明運算符。

class ACCOUNT {
    ... 
    bool operator==(const ACCOUNT& other) const {
        return accno == other.accno; // whatever you want
    }   
}

之后,您可以像使用標准類型一樣使用此operator ==。

您可能會在這里看到更多有關它的信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM