gpt4 book ai didi

c++ - 在另一个成员中重载一个成员

转载 作者:行者123 更新时间:2023-11-28 03:15:06 25 4
gpt4 key购买 nike

在我的学校作业中我需要一点帮助

这是我的头文件:

#include <iostream>
#include <cstring>

using namespace std;

#include "ISBNPrefix.h"

class ISBN
{
char str[11];
char area[6];
char publisher[8];
char title[7];
bool registered;

public:
ISBN();
ISBN(const char*,ISBNPrefix &);

void toStr(char*)const;
void toStrWithStyle(char*)const;
bool empty()const;
bool isRegistered() const;
bool read(istream& is, const ISBNPrefix& list);
void display(ostream&) const;
};

int isValid(const char* str);

这是我的文件的实现:

#define _CRT_SECURE_NO_WARNINGS

#include<iostream>
#include <iomanip>

using namespace std;

#include "ISBN.h"

ISBN::ISBN()
{
str[0]='\0';
area[0]='\0';
publisher[0]='\0';
title[0]='\0';
registered=false;
}

ISBN::ISBN(const char* s,ISBNPrefix& p)
{
if(isValid(s)==1)
{
strcpy_s(str,s);
}
else
{
*this=ISBN();
}
}

bool ISBN::empty()const
{
bool chk=false;
if(str[0]=='\0')
chk=true;

return chk;
}
void ISBN::toStrWithStyle(char* s) const
{
if(registered)
{
sprintf(s,"%s-%s-%s-%c",area,publisher,title,str[9]);
}
else
{
toStr(s);
}
}

void ISBN::toStr(char* s) const
{
if (str[0]!='\0')
strcpy(s,str);
else
strcpy(s,"no data");
}

void ISBN::display(ostream & os) const
{
char str[14];
toStrWithStyle(str);
cout<< setw (13) <<str;
}

int isValid(const char* str)
{
int rc=0;
if(str!=0)
{
int sum,i=0;
sum=0;
for(i=0;i<10;i++)
sum+=(str[i]-'0')*(10-i);
if(sum%11==0)
{
rc= 1;
}
}
else
rc=0;

return rc;
}

bool ISBN::read(istream& is, const ISBNPrefix& list)
{
char str[11];
bool quit=false;
bool ok=false;
char lists;

do{
cout<<"ISBN (0 to quit) : ";
is.getline(str,11); //or is.get(str,11)

if(strcmp(str,"0")==0)
quit=true;
else if (isValid(str)==1)
{
*this=ISBN(str,list);
ok=true;
cout<<"isbn is valid"<<endl;
}
else
{
*this=ISBN();
cout<<"invalid ISBN"<<endl;
}
} while(!quit&&!ok);
return !quit;
}

ISBN::read 我说的地方

*this=ISBN(str,list);

我想重载另一个成员,但我做不到。谁能告诉我该怎么做?

最佳答案

首先,我建议使用 std::string 而不是 char[]。会省去很多麻烦。为了阅读 ISBN,我会这样写:

bool ISBN::read(istream& is) 
{
ISBN result;

// reading into result

std::swap(*this,result);

return !quit;
}

或者更好(作为非成员函数):

std::istream& operator>>(istream& is, ISBN& obj)
{
ISBN result;

// reading into result

is(!quit)
is.clear(std::ios_base::failbit);


std::swap(obj,result);

return is;
}

您应该以任何方式为您的资源使用 RAII 类。在您的特殊情况下,std::string 而不是 char[]

关于c++ - 在另一个成员中重载一个成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17140665/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com