为什么我在main中声明的变量被初始化,好像它是我的类的变量?

时间:2014-02-06 17:46:57

标签: c++ class constructor

这是我的计划:

#include<iostream>
#include<string>

using namespace std;

class classTwo
{
public:
    //constructors
    classTwo();
    classTwo(const char chars[101]);

private:

    char classTwoArray[101];

};

//default classTwo constructor
classTwo::classTwo()
{
    strcpy(classTwoArray, "no data");
}

//other classTwo constructor
classTwo::classTwo(const char thisArray[101])
{
strcpy(this->classTwoArray, thisArray);

}

class classOne
{
public:
    //default constructor
    classOne();

    // function
    void functionOne(const classTwo& classTwoObject);

private:
    classTwo hundredObjects[99];
    int size;
};

//classOne default constructor
classOne::classOne()
{
    size = 0;
}

int main(){
    classTwo object;
    char charArray[101];
    string lemmeSee;

    cout << charArray << endl;
    cin >> lemmeSee;

    return 0;
}

以下是我运行此程序时会发生的事情:

enter image description here 所以我有两个问题:

1)为什么charArray会填充“无数据”,这应该是针对classTwoArray的?我注意到这只发生在main中包含classTwo对象时。

2)“无数据”之前的那些符号是什么?当我注释掉// classTwoObject这一行时,我得到了那些相同的符号,除了在那种情况下而不是“无数据”之后,它们后面跟着一些其他符号($和其他一些符号,我明白是couting的结果一个空数组,但我不明白为什么看起来像括号和行的那些在任何一种情况下都显示出来。)

2 个答案:

答案 0 :(得分:3)

main()中的chararray未初始化。使用未初始化的变量会导致未定义的行为。

你可以猜测会发生什么以及为什么你会得到这个消息。但它未定义

答案 1 :(得分:3)

char charArray[101];未初始化 - 这意味着可以填充任何内容。 charArrayobject都位于堆栈上,编译器将object放在堆栈中charArray之后。当您将charArray输出到cin时,它会在遇到0之前尝试输出每个符号。因为charArray中没有零(它刚刚发生),它继续输出符号并偶然发现object所在的内存。有0object的结尾,因此它停止输出任何内容。您可以通过编写char charArray[101] = {};来解决问题,它会将其初始化为零。