여기 내 프로그램이 있습니다. 나는 타입 Student 객체를 만들고 나서, 학생에게 아이템을 "체크 아웃"하게해야합니다. 그리고 오버로드 된 연산자를 사용하여 사용자가 해당 항목을 체크 아웃하도록합니다.오버로드 된 덧셈 연산자를 사용하는 데 어려움이 있습니다.
MAIN.CPP : 나는 시도하고 최소한의 단순화이 프로그램을 유지하기 위해 헤더 파일 내 모든 클래스되어 정의를 정의
#include <iostream>
#include "Student.h"
using namespace std;
int main() {
Student s(54000, "JOHN", "DOE");
cout << "main:" << endl << (s + "Frisbee") << endl << endl;
system("pause");
return 0;
}
.
Student.h :
#ifndef STUDENT_H
#define STUDENT_H
#include <fstream>
#include <string>
#include <iostream>
using namespace std;
class Student {
public:
string firstName;
string lastName;
int id;
int itemsCheckedOut;
int size;
string *array;
Student(int id = 0, string firstName = "", string lastName = "") {
Student::firstName = firstName;
Student::lastName = lastName;
Student::id = id;
itemsCheckedOut = 0;
size = 10;
array = new string[size];
}
Student(const Student &other) {
itemsCheckedOut = other.itemsCheckedOut;
array = new string[itemsCheckedOut];
for (int i = 0; i < itemsCheckedOut; i++) {
array[i] = other.array[i];
}
}
~Student() {
delete[] array;
array = NULL;
}
Student &operator=(const Student &rhs) {
if (this != &rhs) {
firstName = rhs.firstName;
lastName = rhs.lastName;
id = rhs.id;
itemsCheckedOut = rhs.itemsCheckedOut;
delete[] array;
array = new string[size];
for (int i = 0; i < itemsCheckedOut; i++) {
array[i] = rhs.array[i];
}
}
return *this;
}
void CheckOut(const string &item) {
array[itemsCheckedOut] = item;
itemsCheckedOut++;
}
friend ostream &operator<<(ostream &output, const Student &student) {
output << student.id << " " << student.firstName << " " << student.lastName << endl;
if (student.itemsCheckedOut != 0) {
output << student.itemsCheckedOut;
for (int i = 0; i < student.itemsCheckedOut; i++) {
output << " " << student.array[i] << endl;
}
}
else {
output << 0;
}
return output;
}
const Student operator+(const string &item) {
Student s;
s = *this;
s.CheckOut(item);
cout << "class:" << endl << s << endl << endl;
return s;
}
};
#endif
출력 : 당신이 볼 수 있듯이
class:
54000 JOHN DOE
1 Frisbee
main:
-858993460
1 Frisbee
주에서의 잘못된 일을 출력한다. 첫 번째 이름과 성을 공백 다음에 ID를 출력하는 대신 숫자 -858993460을 출력합니다. 이것은 일종의 메모리 누출 문제가 될 것입니다.하지만 저는 확실히 복사 생성자, 오버로드 된 대입 연산자 및 deconstructor가 모두 올바르게 정의되어 있지만 여러분은 그것들을 살펴볼 수 있습니다.
내가 필사적으로 여기에서 필사적으로되고있는 것에 따라 나는 조금의 도움도 완전히 감사 할 것이다. 감사.
수정 해 주셔서 감사합니다. – Jacob