使用成员函数在循环中打印 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();
}
}
此外,请注意,使用 std::vector
而不是内置数组也是一种选择。
我所做的一些更改包括:
- 向
setfee
成员函数添加了一个参数。
- 为
fee
数据成员使用了 in-class 初始化器。
- 输入费用在
main
中获取,然后传递给 stu
中每个元素的 setfee
成员函数。
- 使用第二个 for 循环为
stu
中的每个元素调用成员函数 showfee
。
我正在用 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();
}
}
此外,请注意,使用 std::vector
而不是内置数组也是一种选择。
我所做的一些更改包括:
- 向
setfee
成员函数添加了一个参数。 - 为
fee
数据成员使用了 in-class 初始化器。 - 输入费用在
main
中获取,然后传递给stu
中每个元素的setfee
成员函数。 - 使用第二个 for 循环为
stu
中的每个元素调用成员函数showfee
。