我需要爲一個具有對象數組作爲私有變量的類定義一個讀取和打印函數。我必須從文本文件讀入對象並將它們打印到屏幕上。爲此,我需要超載< <和>>運算符。我知道我需要使用循環來讀取和打印存儲在數組中的信息,但我不知道如何完成此操作。我的講師給了我們一個基本的函數原型和我需要堅持的主要功能的代碼。我明白這是如何與公共結構一起工作的,因爲我已經完成了這個確切的場景,但是班級的私有變量「讓我絆倒了。I/O過載和從文本文件中讀取
class EmployeeList {
public:
//Constructors
EmployeeList();
EmployeeList(istream&);
//Accessors
bool isEmpty() const;
bool isFull() const;
int size() const; //Number of employees in list
Employee item(int i) const; //i'th employee
//Mutators
void setItem(int i,const Employee& e);
//I/O functions, sets the i'th emplyee to e
void read(istream&);
void print(ostream&) const;
private:
enum {MAXSIZE = 100};
Employee list[MAXSIZE];
int count; //Number of employees in the current list
};
EmployeeList::EmployeeList() {
count = 0;
}
EmployeeList::EmployeeList(istream& in) {
//list[MAXSIZE] = in;
}
bool EmployeeList::isEmpty() const {
return (count == 0);
}
bool EmployeeList::isFull() const {
return (count == MAXSIZE);
}
int EmployeeList::size() const {
return count;
}
Employee EmployeeList::item(int i) const {
}
void EmployeeList::setItem(int i, const Employee& e) {
}
void EmployeeList::read(istream& in) {
Employee tempList;
while (in >> tempList) {
}
}
void EmployeeList::print(ostream& out) const {
for (int i=0; i < size(); i++) {
}
cout << out;
}
上面的部分是EmployeeListList類,下面的部分是重載函數。註釋掉的部分是我認爲可能工作但沒有的想法。
istream& operator>>(istream& in, EmployeeList& l) {
l.read(in);
return in;
}
ostream& operator<<(ostream& out, const EmployeeList& l) {
l.print(out);
return out;
}
以下是給我們的主要功能。
int main() {
authorInfo();
ifstream infile("a1in.txt");
if(!infile) {
cout << "file 'alin.txt' not found.";
return EXIT_FAILURE;
}
EmployeeList theList(infile);
cout << endl;
cout << theList.size() << " employees read:\n" << theList << endl;
process(theList);
return EXIT_SUCCESS;
}
希望有人能引導我走向正確的方向!讓我知道你是否需要更多的代碼。謝謝!
編輯: 僱員讀取和打印功能:
void Employee::read(istream& in) {
in >> name >> id >> salary;
}
void Employee::print(ostream& out) const {
out << getName() <<" "<< getID() <<" "<< getSalary() << endl;
}
僱員重載:
istream& operator>>(istream& in, Employee& e) {
e.read(in);
return in;
}
ostream& operator<<(ostream& out, const Employee& e) {
e.print(out);
return out;
}
編輯2:更新讀()函數。與此同時的線是錯誤的地方。
void EmployeeList::read(istream& in) {
Employee inEmployee;
while (in >> inEmployee && count < MAXSIZE) {
list[count] = inEmployee;
count++;
}
}
編輯3:這是我迄今爲止的print()函數。它確實打印,但我得到了默認的構造函數信息,而不是來自文件的信息。這是讀取還是打印功能問題?我正在考慮閱讀功能。
void EmployeeList::print(ostream& out) const {
cout << endl;
for (int i=0; i < count; i++) {
out << list[count];
}
}
私人變量爲什麼會讓你失望?在公共部分,快速瀏覽看起來應該是所有你需要的。 – BugFinder
姓名,編號或工資中的空白將會中斷Employee :: read。 –