[英]Best practices accessing members in function with const reference parameter in C++
實施以下方案的最佳實踐是什么:
Class A
擁有類型B
的成員對象。
class A
{
private:
B b;
};
class B
{
private:
int x;
};
它獲取類型的對象的打印功能A
作為const &
參數,應打印的成員a
和b
:
void Print(const A& a)
{
cout << a.b.x;
}
讀取函數應設置a
(和b
)及其成員的值:
void Read(A& a)
{
// ...
a.b.x = 2;
}
關於其成員訪問權限,應如何實施class A
?
b
應該公開嗎? class A
”是否應該為b提供2個吸氣劑(1個對“ b”的寫訪問和1個讀訪問)? 附加信息:
在我的真實系統中,類A
和B
更大,它們是龐大的舊系統的一部分。 在該傳統系統Print
和Read
是一個“視圖模型”,其中的成員函數Print
的值寫入到GUI和Read
讀取來自GUI的值,並設置的成員A
和B
。 因此, A
和B
的責任在於保存數據(某種數據模型)。
您應該改用成員函數,並盡可能地封裝數據。 為此, Print
可以是A
的成員函數:
class A
{
B b;
public:
void Print() const /*Let's add some const correctness*/
{
b.Print();
}
};
和
class B
{
int x;
public:
void Print() const
{
std::cout << x;
}
B& operator=(int new_x) /*Standard form of the assignment operator*/
{
x = new_x;
return *this;
}
};
請注意,我為B
提供了賦值運算符 。 然后,您可以在A
類中構建一個函數:
void setX(int x)
{
b = x;
}
最后,盡管如此,對於您的打印,慣用的方法是為<<
std::ostream
重載<<
。 然后,您可以刪除Print
功能。 請參閱如何為ostream適當地重載<<操作符? 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.