Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用私有变量获取正确值时遇到问题_C++ - Fatal编程技术网

C++ 使用私有变量获取正确值时遇到问题

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:

这是一个程序,它获取一个数组,并使用类打印该数组的奇数(命名为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:
    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。