0

こんにちは私はなぜconstこのクラスの「get」関数で使用されるのだろうかと思いますか?

class Album {

public:
    Album(string c, Artist* a, string t, int y, int no):barCode(c), artist(a), title(t), year(y), noCopiesSold(no){}
    const string& getBarCode() const {return barCode;}
    Artist* getArtist() const {return artist;}
    const string& getTitle() const {return title;}
    int getYear() const {return year;}
    int getNoCopiesSold() const {return noCopiesSold;}
    void setBarCode(string value) {barCode = value;}
    void setArtist(Artist* value) {artist = value;}
    void setTitle(string value) {title = value;}
    void setYear(int value) {year = value;}
    void setNoCopiesSold(int value) {noCopiesSold = value;}

    friend ostream& operator << (ostream& out, const Album& album)
    {
        out << album.artist->getName() << " " << album.barCode << " " << album.title << " " << album.year << " " << album.noCopiesSold << endl;
        return out;
    }

private:
    string barCode;
    Artist* artist;
    string title;
    int year;
    int noCopiesSold;
};
4

3 に答える 3

3

このクラスの「get」関数で「const」が使用されるのはなぜですか?

const-correctnessの場合。

  1. 関数を作成することによりconst、関数がその中の非静的メンバー変数を変更せず、constこのメソッド内で他の非関数が呼び出されないことを意味します。
  2. オブジェクトを使用して関数を呼び出すこともできるようになりましたconst(そうしないと、コンパイラエラーが発生します)
  3. 多くのライブラリ関数はconst正しいメソッドを利用します。したがって、const-correctnessは、メソッドと互換性を持たせます(たとえば、演算子よりも小さい- bool <Class>::operator < (const Class&) const
于 2012-05-10T10:35:49.653 に答える
3

constメソッドがオブジェクトを変更しないことをコンパイラーに通知します。これは、constオブジェクト(および非constオブジェクト)を安全に操作できることを意味します。また、コンパイラがいくつかの最適化を行うこともできます

于 2012-05-10T10:37:08.250 に答える
2

関数修飾子(ゲッター(バーコード、タイトル)の場合)とは別に、データメンバーへstringの参照を返しますconst。参照値を変更できるようにすると、クラスのカプセル化が壊れます。

このため、返品Artist*は悪い(またはせいぜい疑わしい)設計です。

于 2012-05-10T10:38:02.240 に答える