Вот моя программа:
#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;
}
Вот что происходит, когда я запускаю эту программу:
Итак, у меня есть два вопроса:
1) Почему charArray заполняется "без данных", который должен быть для классаTwoArray? Я заметил, что это происходит, когда я включаю объект classTwo в main.
2) Каковы эти символы перед "никакими данными?" Я получаю те же символы, когда комментирую строку //classTwoObject, за исключением того, что в этом случае вместо "нет данных" за ними следуют несколько других символов ($ и несколько других, которые, как я понимаю, являются результатом couting пустой массив, но я не понимаю, почему те, которые выглядят как скобки и строка, появляются в любом случае).
char charArray[101];
неинициализирован - это означает, что это может быть заполнено чем угодно. Оба charArray
и object
лежат на стеке и компиляторе помещают object
после charArray
в стек. Когда вы charArray
в cin
он пытается вывести каждый символ, прежде чем он встретит 0
. Поскольку в charArray
не было нулей, оно продолжалось при выводе символов и натыкалось на память, где находится object
. Было 0
и конец object
и поэтому он прекратил вывод чего-либо. Вы можете исправить свою проблему, написав char charArray[101] = {};
, он будет инициализировать нуль.
"no data"
только тогда, когда classTwo object
находится в main()
!
chararray
в main() не инициализируется. Использование неинициализированных переменных приводит к неопределенному поведению.
Вы можете делать предположения о том, что происходит и почему вы получаете именно это сообщение. Но это не определено.
charArray
неинициализирован, поэтому ваша программа вызывает неопределенное поведение. Все может случиться.