class Person {
...
};
class Book {
private:
...
Person *person;
...
public:
...
Person *getPerson() {return person;}
void setPerson(Person *_person) {person = _person;}
...
};
class Library {
private:
vector<Book> books;
vector<Person> people;
public:
vector<Book> getBooks() {return books;}
vector<Person> getPeople() {return people;}
void addBook(Book _book) {//adds a Book to books}
void addPerson(Person _person) {//adds a Person to people}
bool checkOut(Person *_person, Book *_book) {
if (_book->getPerson() == NULL ) {
_book->setPerson(_person);
return true;
}
else {
return false;
}
}
int main() {
Library lib("My Library");
Book b1("The C Programming Language", "Brian Kernighan and Dennis Ritchie");
Book b2("Unknown Title", "Unknown Author");
Book b3("Burning Daylight", "Jack London");
Person p1("John");
Person p2("Peter");
Person p3("Ann");
lib.addPerson(p1);
lib.addPerson(p2);
lib.addPerson(p3);
lib.addBook(b1);
lib.addBook(b2);
lib.addBook(b3);
lib.checkOut(&lib.getPeople().at(1), &lib.getBooks().at(1));
return 0;
}
程序运行。如果我将setPerson放在Book类的构造函数中,那么它可以工作。当我从Library类调用checkOut方法时,为什么它不起作用?为什么checkOut方法在Book类中没有设置Person,虽然它返回true?我不明白什么?谢谢!
答案 0 :(得分:0)
你的问题是:
vector<Book> getBooks() {return books;}
vector<Person> getPeople() {return people;}
这两个都会返回您的库按值的人物和书籍向量。因此,您在两个向量中建立关系,这些向量与库中的实际向量无关。它们保持不变。
因此,后来:
lib.checkOut(&lib.getPeople().at(1), &lib.getBooks().at(1));
对真实的任何内容都没有对您的图书馆进行处理。
将它们更改为:
vector<Book>& getBooks() {return books;}
vector<Person>& getPeople() {return people;}
关于如何在没有指针的情况下完成此操作,这是另一个主题,但这应该解决您的直接问题。