1

私は次のコードを取得しました:

class Book
{
public:
    void print();
    const Book &Book::get();
};
void Book::print()
{
    cout << "print()" << endl;
}
const Book &Book::get()
{
    cout << "get()" << endl;
    return *this;
}

それから私はしました:

Book b;
b.get().print(); // This did not work. Why is that?
4

2 に答える 2

7

他の関数を呼び出すことはできますが、この場合はできません。

const Book &からを返していますget()print()次に、これは非const関数であるを呼び出しています。これを修正するには、print()constを作成します。

void print() const;

void Book::print() const
{
    cout << "print()" << endl;
}

このconstは、オブジェクトの状態が変更されないことを保証します。これは、から返すconstオブジェクトに準拠していますget()mutableただし、それがメンバーの全体的な目的であるため、メンバーを変更できることに注意してください。

編集:ちなみに、あなたが探している用語はですmethod chaining

于 2012-05-03T02:10:00.810 に答える
2

Book :: print()はconstメンバー関数ではないため、Book :: get()によって返されるconstBook参照を使用して呼び出すことはできません。

于 2012-05-03T02:10:28.937 に答える