新手:C++ 私有变量

NewBie: C++ Private Variables

所以我正在学习 C++,我的老师说你需要 intGetFoo() 函数才能 return 私有数据。所以例如我有这个代码

class Pseudorandon{

public:
   Pseudorandon( int Seed,int Multiplier,int Increment,int Modulus);
   void PerformAlga(int a, int b, int c, int d);
   void GetOutput();

private:
  int seed;
  int multiplier;
  int increment;
  int modulus;
  int Number;
  int Number2;
  int Number3;
  int Number4;
};

主要

Pseudorandon::Pseudorandon(int Seed,int Multiplier,int Increment,int Modulus){
  PerformAlga(Seed, Multiplier, Increment, Modulus);
}

void Pseudorandon::PerformAlga(int a, int b, int c, int d){
  seed=a;
  multiplier=b;
  increment=c;
  modulus=d;
}

void Pseudorandon::GetOutput(){
  Number =  (multiplier * seed + increment) % modulus;
  Number2 = Number;
  Number3 = (multiplier * Number2 + increment) % modulus;

  std::cout<<Number<<Number3;
}

int main(void)
{
  Pseudorandon ps(1,40,725,729);
  ps.GetOutput();
}

如果我可以使用 public 函数从我的 class 中获取私有数据而不使用 GET 函数,那么拥有 intGetFoo() 的意义何在?

我什么时候使用 getter,即 (intGetFoo(){return private variable})。 功能或目的是什么??

如果您需要从 class 外部访问数据,则只需要 getter 和 setter。在你的情况下,你可以说

  std::cout << "Output from seed=" << ps.GetSeed() << ", muliplier=" 
            << ps.GetMultiplier() << " = " << ps.GetOutput();

您不需要从内部使用 getter 和 setter GetOutput

从 GetOutput 内部使用 GetFoo 没有意义。要么你误解了你老师的意思,要么他不知道他在说什么。

public/private 的要点是对 class 的用户隐藏 class 的实现。但是当你写你的class的方法时,你是在实现它,而不是使用它,所以直接使用私有成员是没有问题的。

私人成员通常是您内部状态的一部分。 class 用户和儿童 class 都不能访问它。在您的情况下通常 seed

有时,您可能希望授予子 classes 和 class 用户对部分内部状态的只读访问权限:这时您将使用 getter!