У меня есть два почти идентичных фрагмента кода, которые должны выдавать один и тот же вывод, за исключением того, что они не только разные, но одна измененная строка как-то влияет на несвязанный вывод!
#include "stdafx.h"
#include <iostream>
using namespace std;
class Tag {
public:
int num = 0;
Tag* contains = nullptr;
Tag::Tag(int n) { num = n; }
void setContains(Tag t) { contains = &t; }
int getNum() { return num; }
Tag getContains() { return *contains; }
};
int main() {
Tag tag1 = Tag(1); Tag tag2 = Tag(2);
tag1.setContains(tag2);
cout << tag1.getContains().getNum() << endl << (*tag1.contains).getNum() << endl;
return 0;
}
Это выводит
8460735
8460735
или другое случайное число.Что говорит мне, что я каким-то образом выводю адрес указателя, а не объект, на который он ссылается.Поэтому я изменил строку
cout << tag1.getContains().getNum() << endl << (*tag1.contains).getNum() << endl;
на
cout << tag1.getContains().getNum() << endl << (*tag1.contains).num << endl;
и получаю вывод
2
2
Подождите, что?Я понял, если вторая строка изменится с адреса на фактическое число 2, но почему ОБА меняется на 2?