Почему переменные, которые я объявил в main, инициализируются так, как если бы они были переменными для моего класса?

0

Вот моя программа:

#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;
}

Вот что происходит, когда я запускаю эту программу:

Изображение 174551 Итак, у меня есть два вопроса:

1) Почему charArray заполняется "без данных", который должен быть для классаTwoArray? Я заметил, что это происходит, когда я включаю объект classTwo в main.

2) Каковы эти символы перед "никакими данными?" Я получаю те же символы, когда комментирую строку //classTwoObject, за исключением того, что в этом случае вместо "нет данных" за ними следуют несколько других символов ($ и несколько других, которые, как я понимаю, являются результатом couting пустой массив, но я не понимаю, почему те, которые выглядят как скобки и строка, появляются в любом случае).

  • 1
    charArray неинициализирован, поэтому ваша программа вызывает неопределенное поведение. Все может случиться.
Теги:
class
constructor

2 ответа

3
Лучший ответ

char charArray[101]; неинициализирован - это означает, что это может быть заполнено чем угодно. Оба charArray и object лежат на стеке и компиляторе помещают object после charArray в стек. Когда вы charArray в cin он пытается вывести каждый символ, прежде чем он встретит 0. Поскольку в charArray не было нулей, оно продолжалось при выводе символов и натыкалось на память, где находится object. Было 0 и конец object и поэтому он прекратил вывод чего-либо. Вы можете исправить свою проблему, написав char charArray[101] = {}; , он будет инициализировать нуль.

  • 0
    Это также объясняет, почему мы видим "no data" только тогда, когда classTwo object находится в main() !
3

chararray в main() не инициализируется. Использование неинициализированных переменных приводит к неопределенному поведению.

Вы можете делать предположения о том, что происходит и почему вы получаете именно это сообщение. Но это не определено.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню