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 正确性

  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

除了函数限定符 - 对于stringgetter(条形码、标题),您正在返回const对数据成员的引用 - 允许对引用的值进行变异会破坏类中的封装。

出于这个原因,退货Artist*是不好的(或充其量是可疑的)设计。

于 2012-05-10T10:38:02.240 回答