使用成员函数在循环中打印 class 的私有变量的值

Printing value of private variables of a class in a loop using member functions

我正在用 C++ 构建我的第一个程序,我被困在我试图在给出一次值后使用 for 循环多次打印 fee 的值的地方。通过 运行 循环,它在第一次给出正确的值后每次都给出垃圾值。我是 C++ 中 class 主题的新手。请告诉我每次循环运行时如何打印私有变量 fee 的相同值。

#include<iostream>
using namespace std;
class FEE
{
    private:
    int fee;
    public:
    void setfee()
    {
        cout<<"Enter the monthly fee= ";
        cin>>fee;
    }
    void showfee()
    {
        cout<<"Monthly fee is "<<fee<<endl;
    }
};

int main()
{
    FEE stu[5];
    for(int i=0;i<5;i++)
    {
        if(i==0)
        stu[i].setfee();
        stu[i].showfee();
    }
}

问题 是您只为数组 stu 中的第一个对象调用 setfee 成员函数。由于数组 stu 默认初始化的 意味着它的元素也被默认初始化, stu 中每个元素的数据成员 fee不确定值。因此,在未调用 setfee 的元素上调用 showfee 未定义的行为 因为对于这些元素 fee 具有不确定的值并且您'重新打印 showfee.

中的值

because I want to set the same fee amount for every student and then autoprint it in a file for every stu[] array variable.

为了解决这个问题并按照你在上面引用的语句中所说的去做,你可以在 main 中向用户询问费用,然后将输入作为参数传递给 setfee 成员功能。为此,我们必须更改 setfee 成员函数,使其具有 int 参数。接下来,使用第二个 for 循环,我们可以使用 showfee 成员函数打印 stu 中每个元素的 fee。这显示 below:

#include<iostream>

class FEE
{
    private:
    int fee = 0; //use in-class initializer for built in type
    public:
    void setfee(int pfee)
    {
        fee = pfee;
        
    }
    void showfee()
    {
        std::cout<<"Monthly fee is "<<fee<<std::endl;
    }
};

int main()
{
    FEE stu[5];   //default initiailized array 
    
    int inputFee = 0;
    for(int i=0;i<5;i++)
    {
        std::cout<<"Enter the monthly fee= ";
        std::cin>>inputFee;
        
        //call setfee passing the inputFee
        stu[i].setfee(inputFee);
        
    }
    for(int i = 0; i<5; ++i)
    {
        stu[i].showfee();
    }
}

Demo

此外,请注意,使用 std::vector 而不是内置数组也是一种选择。

我所做的一些更改包括:

  1. setfee 成员函数添加了一个参数。
  2. fee 数据成员使用了 in-class 初始化器
  3. 输入费用在 main 中获取,然后传递给 stu 中每个元素的 setfee 成员函数。
  4. 使用第二个 for 循环为 stu 中的每个元素调用成员函数 showfee