Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何比较同一类的两个对象? 我在C++中做了一个银行管理系统。我有VisualStudio2008。请参阅下面的代码,我将解释我的问题 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"; } 类帐户 { 国际帐户、存款; 字符名[20]; 煤焦类型; 公众: int创建_帐户() { //接受用户详细信息的整个过程都在这里/ } int retacc()//访问器函数 { 返回账号; } 作废帐户() { 账户acc1、acc2; char ch='Y'; fstream rec; rec.open(“d://unpassed.dat”,ios::out | ios::in | ios::app | ios::binary); c: acc1.创建_账户(); rec.seekg(0); 而(!rec.eof()) { rec.read((char*)和acc2,sizeof(acc2)); if(acc1.retacc()==acc2.retacc())//这就是我做比较部分的地方。这是不是做比较的错误方法? { CUT一个可能要考虑的方法是创建一个静态方法来从一个文件加载数据(而不是在帐户对象上有一个实例方法)。每个帐户编号对应一个帐户对象,因此在加载数据时,从每个帐户编号生成一个帐户对象。将这些帐户对象存储在数据结构(如向量)中_C++_Object - Fatal编程技术网

如何比较同一类的两个对象? 我在C++中做了一个银行管理系统。我有VisualStudio2008。请参阅下面的代码,我将解释我的问题 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"; } 类帐户 { 国际帐户、存款; 字符名[20]; 煤焦类型; 公众: int创建_帐户() { //接受用户详细信息的整个过程都在这里/ } int retacc()//访问器函数 { 返回账号; } 作废帐户() { 账户acc1、acc2; char ch='Y'; fstream rec; rec.open(“d://unpassed.dat”,ios::out | ios::in | ios::app | ios::binary); c: acc1.创建_账户(); rec.seekg(0); 而(!rec.eof()) { rec.read((char*)和acc2,sizeof(acc2)); if(acc1.retacc()==acc2.retacc())//这就是我做比较部分的地方。这是不是做比较的错误方法? { CUT一个可能要考虑的方法是创建一个静态方法来从一个文件加载数据(而不是在帐户对象上有一个实例方法)。每个帐户编号对应一个帐户对象,因此在加载数据时,从每个帐户编号生成一个帐户对象。将这些帐户对象存储在数据结构(如向量)中

如何比较同一类的两个对象? 我在C++中做了一个银行管理系统。我有VisualStudio2008。请参阅下面的代码,我将解释我的问题 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"; } 类帐户 { 国际帐户、存款; 字符名[20]; 煤焦类型; 公众: int创建_帐户() { //接受用户详细信息的整个过程都在这里/ } int retacc()//访问器函数 { 返回账号; } 作废帐户() { 账户acc1、acc2; char ch='Y'; fstream rec; rec.open(“d://unpassed.dat”,ios::out | ios::in | ios::app | ios::binary); c: acc1.创建_账户(); rec.seekg(0); 而(!rec.eof()) { rec.read((char*)和acc2,sizeof(acc2)); if(acc1.retacc()==acc2.retacc())//这就是我做比较部分的地方。这是不是做比较的错误方法? { CUT一个可能要考虑的方法是创建一个静态方法来从一个文件加载数据(而不是在帐户对象上有一个实例方法)。每个帐户编号对应一个帐户对象,因此在加载数据时,从每个帐户编号生成一个帐户对象。将这些帐户对象存储在数据结构(如向量)中,c++,object,C++,Object,然后,为了确定帐号是否已经存在,您只需在向量上迭代,检查帐号是否与现有的帐号对应。如果对应,则拒绝输入并重复,直到输入有效的帐号 这就是说,@asawyer在他对安全问题的评论中是绝对正确的。你确定用户应该提供自己的账号吗?通常情况下,这将由银行处理,用户在创建用户账号时只会被分配一个账号。不过,这对你来说可能有点过火,而且ca根据你的教授为你提供的指导方针,不要忽视 编辑:一点伪代码来帮助您理解 class Account { Account(acctNumber); reta

然后,为了确定帐号是否已经存在,您只需在向量上迭代,检查帐号是否与现有的帐号对应。如果对应,则拒绝输入并重复,直到输入有效的帐号

这就是说,@asawyer在他对安全问题的评论中是绝对正确的。你确定用户应该提供自己的账号吗?通常情况下,这将由银行处理,用户在创建用户账号时只会被分配一个账号。不过,这对你来说可能有点过火,而且ca根据你的教授为你提供的指导方针,不要忽视

编辑:一点伪代码来帮助您理解

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容器中,然后在该容器上进行迭代以查看您要查找的值是否已经存在


这只是pSueDO代码,但它应该足以让你知道如何从这里开始。祝你好运!

你可能要考虑的一个方法是创建一个静态方法来从文件加载数据(而不是在帐户对象上有一个实例方法)。。每个帐户编号对应一个帐户对象,因此在加载数据时,从每个帐户编号生成一个帐户对象。将这些帐户对象存储在数据结构(如向量)中

然后,为了确定帐号是否已经存在,您只需在向量上迭代,检查帐号是否与现有的帐号对应。如果对应,则拒绝输入并重复,直到输入有效的帐号

这就是说,@asawyer在他对安全问题的评论中是绝对正确的。你确定用户应该提供自己的账号吗?通常情况下,这将由银行处理,用户在创建用户账号时只会被分配一个账号。不过,这对你来说可能有点过火,而且ca根据你的教授为你提供的指导方针,不要忽视

编辑:一点伪代码来帮助您理解

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容器中,然后在该容器上进行迭代以查看您要查找的值是否已经存在


这只是pSueDO代码,但它应该足以让你知道如何从这里开始。祝你好运!

你可以在C++中声明运算符。

class ACCOUNT {
    ... 
    bool operator==(const ACCOUNT& other) const {
        return accno == other.accno; // whatever you want
    }   
}
之后,您可以像对待标准类型一样使用此运算符==


你可以看到更多。

你可以在C++中声明运算符。

class ACCOUNT {
    ... 
    bool operator==(const ACCOUNT& other) const {
        return accno == other.accno; // whatever you want
    }   
}
之后,您可以像对待标准类型一样使用此运算符==


您可能会看到更多信息。

现在我确信这对于这个特定任务来说不是问题,但您在这里犯下了一个巨大的安全错误-您在错误消息中泄露了特权信息。假设有人攻击您的帐户持有人,并想知道帐户号码。他们只需要按顺序输入号码,然后重新输入将系统报告为现有帐户的帐户连接起来!嗯,是的。我的实际程序本身有一个功能,可以显示所有帐户持有人及其帐户号码,以及他们的姓名和帐户余额。因此,这对程序的安全性影响不大。只想知道如何比较sam的两个对象acc1和acc2e类。上面的函数不允许我这样做。如果有某种错误,请指导我。帮助!此代码中有一个
goto
!您意识到您可以执行
acc1.create_account();rec.seekg(0);继续;
转到哪里正确?你能修复这个吗?它让我的眼睛流血。没有弄明白吗?对不起,这里有一个16岁的孩子?转到在这里被认为是一个禁忌吗?在语言中使用
转到
有很好的理由。真的。但是除了为解析器生成的特定代码之外,我还没有看到一个语法分析器或者可能是我在代码领域工作了十多年,当我删除它的时候,我看到了一个。你说你正在学习这门语言——永远不要写
goto
。当需要阅读你的代码时,你未来的自己会感谢你。现在我确信这不是这个特定任务的问题,但你在这里犯下了巨大的安全罪-您在错误消息中泄露了特权信息。假设有人攻击您的帐户持有人,并想知道帐户号码。他们只需按顺序输入号码,然后将您的系统报告的号码记录为现有帐户!好的,是的。我的实际程序本身具有显示所有帐户持有人的功能s和他们的帐号,还有他们的名字和帐户余额。所以,这对程序的安全性影响不大