C++ 使用私有变量获取正确值时遇到问题
这是一个程序,它获取一个数组,并使用类打印该数组的奇数(命名为m_sumOdd)和偶数(命名为m_sumOven)之和。但是,当我运行它并输入一些值(4、6、9、3、1)时,m_sum偶数返回10,m_sumOdd返回2037769787。m_sumOdd有什么问题C++ 使用私有变量获取正确值时遇到问题,c++,C++,这是一个程序,它获取一个数组,并使用类打印该数组的奇数(命名为m_sumOdd)和偶数(命名为m_sumOven)之和。但是,当我运行它并输入一些值(4、6、9、3、1)时,m_sum偶数返回10,m_sumOdd返回2037769787。m_sumOdd有什么问题 #include <iostream> #include <string> class myClass { private: int m_sumEven; int m_sumOdd; public:
#include <iostream>
#include <string>
class myClass {
private:
int m_sumEven;
int m_sumOdd;
public:
myClass() {
m_sumEven = 0;
m_sumOdd = 0;
}
myClass(int arr[]) {
for (int i = 0; i < 5; i++)
{
if (arr[i] % 2 == 0) {
m_sumEven += arr[i];
}
else if (arr[i] % 2 != 0) {
m_sumOdd += arr[i];
}
}
print();
}
void print() {
std::cout << m_sumEven << "\t" << m_sumOdd << std::endl;
}
};
int main(){
int main_arr[5];
for (int j = 0; j < 5; j++)
{
std::cin >> main_arr[j];
}
myClass obj(main_arr);
std::cin.get();
}
#包括
#包括
类myClass{
私人:
int m_Sumeen;
int m_sumOdd;
公众:
myClass(){
m_sumeen=0;
m_sumOdd=0;
}
myClass(int-arr[]){
对于(int i=0;i<5;i++)
{
如果(arr[i]%2==0){
m_sumeen+=arr[i];
}
否则如果(arr[i]%2!=0){
m_sumOdd+=arr[i];
}
}
打印();
}
作废打印(){
std::cout第二个构造函数不像第一个构造函数那样初始化私有变量
m_sumEven = 0;
m_sumOdd = 0;
把它们也放到第二个构造函数中
更好的是,把它们放在宣言上:
int m_sumEven = 0;
int m_sumOdd = 0;
现在你不需要第一个构造函数了
不相关:考虑使用<代码> STD::IndialIZELS.ListBux/Cord>。这为您提供了一个安全的方式来知道有多少项被传递给构造函数,而现在您有一个固定的5,它可能会在以后改变。
< P>当您不初始化C++中的变量时,该变量的默认值是ALLHA发生的任何垃圾值。因此,如果您将privates变量初始化为零(如在非参数化构造函数中),您的问题将得到解决。您的评论:
这个问题来自于我的uni教科书,它指定私有变量应该在默认构造函数中初始化,而另一个构造函数找到和
我不确定教科书在寻找什么解决方案,但有一种机制允许一个构造函数使用另一个构造函数
class myClass {
private:
int m_sumEven;
int m_sumOdd;
public:
myClass() {
m_sumEven = 0;
m_sumOdd = 0;
}
myClass(int arr[]): myClass() { // <-------
....
class-myClass{
私人:
int m_Sumeen;
int m_sumOdd;
公众:
myClass(){
m_sumeen=0;
m_sumOdd=0;
}
myClass(int arr[]):myClass(){/@micheal chourdakis我必须使用默认构造函数来初始化它们,并使用另一个构造函数来计算奇数和偶数。是的,但我已经在默认构造函数中初始化了它们。但是当你创建像myClass obj(main_arr)这样的对象时;
您已经重写了默认构造函数,并且使用了这个myClass(int arr[])
constructor,对于这个构造函数,你的变量没有初始化,所以,垃圾值问题。哦,现在我明白了。但是有没有办法解决这个问题,因为这个问题来自我的uni教科书,它规定私有变量应该在默认构造函数中初始化,如果必须的话,另一个构造函数会找到SUM在默认构造函数中专门初始化变量,即使您重写了它,也可以将*this=myClass();
作为构造函数myClass(int-arr[]的第一行)
,这将调用默认构造函数firstWelcome,我很高兴我能提供帮助:)我必须使用此格式。这意味着我只能在默认构造函数中初始化m_sumOdd和m_sum偶数,并使用第二个构造函数来计算sumOdd和sumEven。