【问题标题】:NewBie: C++ Private Variables新手:C++ 私有变量
【发布时间】:2015-11-27 11:33:35
【问题描述】:

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

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();
}

如果我可以在不使用 GET 函数的情况下使用类中的公共函数获取私有数据,那么拥有 intGetFoo() 有什么意义。

我什么时候使用吸气剂,即 (intGetFoo(){return private variable})。 功能还是有什么目的??

【问题讨论】:

    标签: c++ function get private


    【解决方案1】:

    如果你需要从类外访问数据,你只需要 getter 和 setter。在你的情况下,你可能会说

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

    你不需要在GetOutput内部使用getter和setter

    【讨论】:

    • 好吧我明白了,我误解了我的教授。因此,无论何时您想访问类内的信息以在我的主函数中说输出,我都需要 Getters 以便在这种情况下获得该数字,如果我要在我的主函数中编写 GetSeed(),我可以说`std ::cout
    • 是的 - 如果你想要类之外的私有数据 - getter 和/或 setter。如果它真的是班级私有的,那么你就不需要他们了。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2013-11-27
        • 2013-06-22
        • 1970-01-01
        • 2013-08-08
        • 1970-01-01
        • 2013-09-14
        • 2015-06-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多