Потому что вы делаете копии dogClass
объектов во многих местах.Пожалуйста, подумайте о разнице значений, ссылок и указателей.Например, в функции main()
, которую вы вызываете iAnimalClass.setDogOne(iDogClassOne);
Аргумент передается как ссылка, это нормально.Но тогда вы копируете в вектор.Это немного сложно, потому что вы не можете передать ссылку в векторе.В этом случае вам придется использовать вектор указателей на dogClass
.
Теперь у вас уже есть два экземпляра dogClass
.Один в главной функции, другой в векторе animalClass
.
Следующая проблема заключается в функции main()
, где вы создаете экземпляр iDogClassTwo
.
Теперь у вас есть три экземпляра dogClass
.
Затем вы вызываете iAnimalClass.getDogOne(iDogClassTwo);
, который копирует собаку из вектора в собаку в главной функции.
Вот исправленная версия:
#include <vector>
#include <iostream>
class dogClass{
public:
void setVariableA(std::vector<double> newNum) {
variableA.push_back(newNum);
}
void printVariableA() {
if (variableA.size() != 0) {
std::cout << variableA[0][0] << std::endl;
std::cout << variableA[0][1] << std::endl;
}
}
dogClass & operator=(const dogClass &src) {
variableA = src.variableA;
return *this;
}
private:
std::vector<std::vector<double>> variableA;
};
class animalClass{
public:
void addNumberToDog(std::vector<double> num) {
dogClass& tempDogClass = getDogOne();
tempDogClass.setVariableA(num);
std::cout << "Address of temp Dog: " << &tempDogClass << std::endl;
std::cout << "Variables in tempDog:\n";
tempDogClass.printVariableA();
std::cout << std::endl;
}
dogClass& getDogOne() {
return *dogs[0];
}
void setDogOne(dogClass &dogOne) {
dogs.push_back(&dogOne);
}
private:
std::vector<dogClass*> dogs;
};
int main() {
animalClass iAnimalClass;
dogClass iDogClassOne;
iAnimalClass.setDogOne(iDogClassOne);
std::vector<double> newNum;
newNum.push_back(12);
newNum.push_back(15);
iAnimalClass.addNumberToDog(newNum);
dogClass& iDogClassTwo = iAnimalClass.getDogOne();
//Why are these not equal. Also why does dog Two not contain the values in dog One?
std::cout << "Address of dog One: " << &iDogClassOne << std::endl;
std::cout << "Variables in dog One:\n";
iDogClassOne.printVariableA();
std::cout << std::endl;
std::cout << "Address of dog Two: " << &iDogClassTwo << std::endl;
std::cout << "Variables in dog Two:\n";
iDogClassTwo.printVariableA();
std::cout << std::endl;
return 0;
}