您好我想知道为什么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;
};
答案 0 :(得分:3)
为什么“const”在这个类中的“get”函数中使用?
const-correctness 。
const
,它意味着函数不是
更改其中的任何非静态成员变量,并且不会在其中调用其他非const
函数
这个方法const
对象调用该函数(否则
导致编译器错误)const
正确的方法;因此,const-correctness使您的方法与之兼容(例如,小于运算符 - bool <Class>::operator < (const Class&) const
)答案 1 :(得分:3)
const
告诉编译器该方法不会更改对象。这意味着对const
个对象(以及非const
个对象)进行操作是安全的。它还使编译器能够进行一些优化
答案 2 :(得分:2)
除了函数限定符 - 对于string
getter(条形码,标题),您将返回对数据成员的const
引用 - 允许引用的值被突变将破坏封装类。
出于这个原因,返回Artist*
是不好的(或者最好是可疑的)设计。