【问题标题】:Accessing private members within a class? [closed]访问班级内的私人成员? [关闭]
【发布时间】:2019-08-28 07:47:56
【问题描述】:

为什么我们必须先复制然后使用get函数?为什么我们可以像borrowers.getID() == ID那样直接使用get函数而不是borrow.getID() == ID

我只需要一个解释。我知道有些东西可能会丢失,但我在这里很困惑,因为它看起来效率不高!

class ReadershipList {
private:
    ifstream myin;
    ofstream myout;
    string readerfile;
    vector<Borrower> borrowers;
public:
    int findBorrowerbyID(string ID); //Find the borrowers index by ID
    int findBorrowerbyName(string name);
    void addBorrower(Borrower newBorrow); //Add a borrower to the vector of borrowers
    void listBorrowers(); //Prints the list of borrowers
    bool deleteBorrower(string ID); //Delete borrower using ID
    Borrower getBorrowerbyID(string ID); /
    Borrower getBorrowerbyName(string name); //Get borrower details using name
};

为什么我不能直接访问会员?

而不是使用这个:

bool ReadershipList::deleteBorrower(string ID) {
    Borrower borrow;
    for (int b = 0; b < borrowers.size(); b++) {
        borrow = borrowers[b];
        if (borrow.getID() == ID) {
            borrowers.erase(borrowers.begin() + b);
            return true;
        }
    }
    return false;
}

【问题讨论】:

  • 因为borrowersstd::vector 而不是Borrower?!
  • 你不必必须复制——你可以写borrowers[b].getID()

标签: c++ class oop private


【解决方案1】:

你不需要复制,你可以做

bool ReadershipList::deleteBorrower(string ID) {
    for (int b = 0; b < borrowers.size(); b++) {
        if (borrowers[b].getID() == ID) {
            borrowers.erase(borrowers.begin() + b);
            return true;
        }
    }
    return false;
}

bool ReadershipList::deleteBorrower(string ID) {
    for (int b = 0; b < borrowers.size(); b++) {
        Borrower & borrow = borrowers[b]; // or better "const Borrower & borrow = borrowers[b];" if "string Borrower::getID() const"

        if (borrow.getID() == ID) {
            borrowers.erase(borrowers.begin() + b);
            return true;
        }
    }
    return false;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-23
    • 2016-10-26
    • 2023-04-06
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多