【问题标题】:How do you approach a private variable from a different class你如何处理来自不同类的私有变量
【发布时间】:2016-11-22 07:17:05
【问题描述】:
void User :: buyApples(){   
while(1){
        cout<<"How many do you want to buy? Press 0 to quit.";cin>>qq;

        if(qq==0)
            return ;

        if(qq<= f.getnumofApples()){
            if(salary>=(qq*200)){
                invofApples+=qq;
                salary-=(qq*200);
                showsalary();       
            }
            else{
                cout<<"Not enough money"<<endl;
                void homescreen();
            }
        }
        else{
            cout<<"There's not enough Apples in Stock"<<endl;
            continue;
        }
    }
}

这段代码是一个市场,qq是用cin输入的。

我可以更改 User 类中的薪水和私有变量。

但我还需要使用 int numofApples 更改水果类中的私有变量。如何更改numofApples

我似乎无法更改 User 类中的变量。当我试图从水果类中更改它时,qq 没有结转。我该怎么办?

【问题讨论】:

  • 这就是private 变量的全部意义——禁止从类外修改这些变量。如果您想更改这些值 - 为此创建公共方法,或将这些变量设为公共。

标签: c++


【解决方案1】:

如果您想从另一个类访问私有变量,您应该在该类中实现一个公共方法来执行此操作,例如 get/set 方法。

这样您将保持变量的可见性

【讨论】:

    【解决方案2】:

    您可以允许 User 类访问 Fruit 类的私有变量,方法是将其声明为 Fruit 的 friend

    class Fruit {
        friend class User;
    
        /* Rest of class */
    }
    

    问题是,这真的是你想要的吗?私有变量通常用于不应该被其他类改变的东西。

    【讨论】:

      【解决方案3】:

      除非您发布您的 UserFruit 课程,否则没有人可以回答。

      在您这样做之前,请考虑一下面向对象编程的意义:将数据和行为封装到软件组件中。类中私有变量背后的想法是您需要提供公共方法来更新它们。如果您不提供方法,则表示您不希望在类之外更改值。

      向拥有要更改的变量的类添加公共方法。在您要更新它们的代码中调用这些方法。

      【讨论】:

        【解决方案4】:

        私有成员的目的是在您不希望它们被外部访问时防止它们被外部访问。如果要允许访问,则必须为用户提供一种设置值的方法。下面是 Fruit 类的 setter 方法示例,该方法允许用户设置苹果的数量。

        void Fruit::setNumberOfApples(int newNumApples) 
        { 
            numofApples = newNumApples; 
        }
        

        【讨论】:

        • 但是水果店为什么要让客户设置他们的库存数量呢?
        • 自助结账?也许“setter”应该命名为“purchase”
        • 如果这就是你的 setter 中的全部内容,那么为什么不将 numofApples 公开?
        • 通过将它放入 getter 和 setter 中,您可以在一定程度上控制它的修改方式。 Here is a SO post you can read.
        猜你喜欢
        • 2019-05-09
        • 2013-06-11
        • 2016-11-05
        • 1970-01-01
        • 1970-01-01
        • 2016-07-15
        • 2014-01-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多