簡體   English   中英

如何在C ++中為類的每個成員編寫賦值運算符

[英]How to code an assignment operator for each member of a class in C++

我是C ++的新手,現在正在嘗試實現模型。 那么,為類的每個成員重載賦值運算符(作為setter)是否有意義? 如果非成員函數試圖為私有/受保護的數據成員設置新值,這將非常重要。 例如:

class Human {
  private:
      double aWeight[100]; /* let's say I want to keep... 
...a set of 100 weight measures of this human.*/

    // member functions and constructors here...

    };

現在,讓我們說我有一個非成員函數來模擬這些測量結果...非成員函數,因為我有一個大模型,並且在model.cpp文件中將每個方程實現為一個小函數。

bool ComputeWeight(Human * humanpt, double energy, int day){

  humanpt->aWeight[day] = energy * 0.8;
}

現在,我開始討論:很明顯,我可以有一個名為setWeight(double energy,int day)的成員函數,然后執行以下操作:

bool ComputeWeight(Human * humanpt, double energy, int day){
   humanpt->setWeight(energy, day);
}

但是,在對大型模型進行編碼時,計算新的數據成員值並通過設置的函數在對象內更新它們非常不切實際。 他們是否可以將重載operator =編碼到類的每個數據成員上? 因此,對於成員aWeight,我將擁有自己的operator =,完全按照第一個示例中的方式進行Compute函數嗎?

為類的每個成員重載賦值運算符(作為設置器)是否有意義?

C ++不允許您為單個成員重載賦值運算符。 直接分配給成員的唯一方法是將其公開,然后根據成員的類型(而不是包含的類)重載賦值運算符。

另一方面,您可以(有時應該)為類的成員提供setter方法。

我認為您正在將賦值運算符(例如c = 10; )與setter方法(例如c.setWeight(10); 。這是兩件完全不同的事情。

附錄:

使分配運算符將一個對象的數據復制到另一對象的數據。 允許直接使用賦值運算符設置成員變量的唯一方法是將該成員聲明為public。 在面向對象編程中,這是令人討厭的,因為它破壞了封裝和數據隱藏。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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