簡體   English   中英

在C ++中使用const引用參數訪問函數中成員的最佳實踐

[英]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 &參數,應打印的成員ab

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個讀訪問)?

附加信息:
在我的真實系統中,類AB更大,它們是龐大的舊系統的一部分。 在該傳統系統PrintRead是一個“視圖模型”,其中的成員函數Print的值寫入到GUI和Read讀取來自GUI的值,並設置的成員AB 因此, AB的責任在於保存數據(某種數據模型)。

您應該改用成員函數,並盡可能地封裝數據。 為此, 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM