[英]getters and setters for composit members C++
我正在學習 C++,但我在為作為其他對象成員的對象的 getter 和 setter 時遇到了一些麻煩。
我有一個 DateOfBirth 類,其中包含 int month、int day、int year 及其適當的 getter 和 setter。 我想要一個 DateOfBirth 類的實例作為另一個類的私有成員。
容器類中的 getter/setter 的正確實現是什么?
取決於復制DateOfBirth
的成本。 由於你的存儲只有幾個int
s,我會像往常一樣寫一個 getter/setter:
const DateOfBirth &GetDate() const {return date;}
void SetDate(DateOfBirth new_date) const {date = new_date;}
但是請記住,沒有一個正確的實現,使用哪種 setter 取決於您首先需要它的原因。 如果您在讀/寫成員時不需要任何自定義邏輯(並且預計將來不需要它),您可以將成員設為公開。
如果類的復制成本很高,您可以讓 setter 返回一個非常量引用: DateOfBirth &SetDate() {return date;}
,但這嚴重限制了您可以添加到 setter 后者的邏輯,此時您可能會好讓會員公開。
您還可以為各個子成員實現設置器。
或者您可以讓“setter”接受一個函數/lambda,該函數/lambda 被賦予對該成員的非常量引用作為參數:
void SetDate(auto &&setter) {decltype(setter)(setter)(date);}
// Then:
x.SetDate([](DateOfBirth &date){date = ...;});
一種粗略的方式(與您當前給定的描述相匹配)如下所示:
class DateOfBirth
{
private:
int month = 0, day = 0, year = 0;
public:
//getters
int getMonth() const
{
return month;
}
int getDay() const
{
return day ;
}
int getYear() const
{
return year;
}
//setters
void setMonth(int pmonth)
{
month = pmonth;
}
void setDay(int pday)
{
day = pday ;
}
void setYear(int pyear)
{
year = pyear;
}
};
class AnotherClas
{
DateOfBirth d;
public:
//getter
DateOfBirth getDateOfBirth() const
{
return d;
}
//setter
void setDateOfBirth(int pmonth, int pday, int pyear)
{
d.setMonth(pmonth); //set month
d.setDay(pday); //set day
d.setYear(pyear); //set year
}
};
int main()
{
//create instance of another class
AnotherClas a;
a.setDateOfBirth(10, 2, 3);
//lets confirm by printing
std::cout << a.getDateOfBirth().getMonth() << "-" << a.getDateOfBirth().getDay() << "-" << a.getDateOfBirth().getYear() <<std::endl;
return 0;
}
上述程序的輸出是:
10-2-3
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.