C++ 如何更改向量中的类成员值 #包括 #包括 使用名称空间std; 类所有者{ 受保护的: 字符串所有者名称; 国际收支平衡; int numPetsCheckin; 线宠物[100]; 公众: 所有者(); 所有者(常量字符串和所有者名称,整数余额); 字符串getOwnerName(){return ownerName;} int getBalance(){return balance;} int getNumPetsCheckin(){return numPetsCheckin;} void pushListPet(字符串a){ pet[numPetsCheckin]=a; numPetsCheckin++; //cout
正如人们在评论中解释的那样,代表A和所有者[0]的字节是不同的。可以存储指向同一内存的指针,但通常目的只是存储在一些连续内存中并访问其中的特定点 考虑将A和B作为引用(在某些情况下编译器可能将其实现为指针),而不是生成指针数组C++ 如何更改向量中的类成员值 #包括 #包括 使用名称空间std; 类所有者{ 受保护的: 字符串所有者名称; 国际收支平衡; int numPetsCheckin; 线宠物[100]; 公众: 所有者(); 所有者(常量字符串和所有者名称,整数余额); 字符串getOwnerName(){return ownerName;} int getBalance(){return balance;} int getNumPetsCheckin(){return numPetsCheckin;} void pushListPet(字符串a){ pet[numPetsCheckin]=a; numPetsCheckin++; //cout,c++,C++,正如人们在评论中解释的那样,代表A和所有者[0]的字节是不同的。可以存储指向同一内存的指针,但通常目的只是存储在一些连续内存中并访问其中的特定点 考虑将A和B作为引用(在某些情况下编译器可能将其实现为指针),而不是生成指针数组 #include <iostream> #include <string> using namespace std; class Owner{ protected: string ownerName; i
#include <iostream>
#include <string>
using namespace std;
class Owner{
protected:
string ownerName;
int balance;
int numPetsCheckin;
string pet[100];
public:
Owner();
Owner(const string& ownerName, int balance);
string getOwnerName(){return ownerName;}
int getBalance(){return balance;}
int getNumPetsCheckin(){return numPetsCheckin;}
void pushListPet(string a){
pet[numPetsCheckin] = a;
numPetsCheckin++;
//cout << numPetsCheckin;
}
void showOwners(){
cout << "Owners { name: " << ownerName << ", balance: " << balance << ", numPetsCheckin: " << numPetsCheckin << "}\n";
}
};
Owner:: Owner()
: ownerName("No name"), balance(0), numPetsCheckin(0){}
Owner:: Owner(const string& theName, int theBalance)
: ownerName(theName), balance(theBalance), numPetsCheckin(0){}
int main(){
int people = 0;
Owner owner[100];
Owner A( "A", 10);
owner[people] = A;
people++;
Owner B("B", 20);
owner[people] = B;
people++;
A.showOwners();
A.pushListPet("momo");
A.showOwners();
cout << "owner[0].getOwnerName: " << owner[0].getOwnerName() << endl;
cout << "owner[0].getNumPetsCheckin: " << owner[0].getNumPetsCheckin() << endl;
cout << "A.getNumPetsCheckin: " << A.getNumPetsCheckin() << endl;
}
Owners { name: A, balance: 10, numPetsCheckin: 0}
Owners { name: A, balance: 10, numPetsCheckin: 1}
owner[0].getOwnerName: A
owner[0].getNumPetsCheckin: 0
A.getNumPetsCheckin: 1
正如人们在评论中解释的那样,代表A和所有者[0]的字节是不同的。可以存储指向同一内存的指针,但通常目的只是存储在一些连续内存中并访问其中的特定点 考虑将A和B作为引用(在某些情况下编译器可能将其实现为指针),而不是生成指针数组
#include <iostream>
#include <string>
using namespace std;
class Owner{
protected:
string ownerName;
int balance;
int numPetsCheckin;
string pet[100];
public:
Owner();
Owner(const string& ownerName, int balance);
string getOwnerName(){return ownerName;}
int getBalance(){return balance;}
int getNumPetsCheckin(){return numPetsCheckin;}
void pushListPet(string a){
pet[numPetsCheckin] = a;
numPetsCheckin++;
//cout << numPetsCheckin;
}
void showOwners(){
cout << "Owners { name: " << ownerName << ", balance: " << balance << ", numPetsCheckin: " << numPetsCheckin << "}\n";
}
};
Owner:: Owner()
: ownerName("No name"), balance(0), numPetsCheckin(0){}
Owner:: Owner(const string& theName, int theBalance)
: ownerName(theName), balance(theBalance), numPetsCheckin(0){}
int main(){
int people = 0;
Owner owner[100];
Owner A( "A", 10);
owner[people] = A;
people++;
Owner B("B", 20);
owner[people] = B;
people++;
A.showOwners();
A.pushListPet("momo");
A.showOwners();
cout << "owner[0].getOwnerName: " << owner[0].getOwnerName() << endl;
cout << "owner[0].getNumPetsCheckin: " << owner[0].getNumPetsCheckin() << endl;
cout << "A.getNumPetsCheckin: " << A.getNumPetsCheckin() << endl;
}
Owners { name: A, balance: 10, numPetsCheckin: 0}
Owners { name: A, balance: 10, numPetsCheckin: 1}
owner[0].getOwnerName: A
owner[0].getNumPetsCheckin: 0
A.getNumPetsCheckin: 1
问:为什么所有者[0].getNumPetsCheckin()和A.getNumPetsCheckin()不同
它们是不同的对象,在状态
owner[people]=A;
之后,对象A
被复制到owner[people]
中。您可以使用打印地址验证:
std::coutQ:为什么所有者[0].getNumPetsCheckin()和A.getNumPetsCheckin()不同
它们是不同的对象,在状态owner[people]=A;
之后,对象A
被复制到owner[people]
中。您可以使用打印地址验证:
std::coutvector
s存储你放入其中的内容的副本。大多数情况下,这是正确的选择,但偶尔你需要一个vector
指针,这样你就可以共享一个对象。大多数代码都是不必要的;你可以将它减少到六行。我可以猜测发生了什么,但我确实这样做了C++ C++不是java或C语言,它们不一样,你希望C++中的对象像java或C语言那样工作,但是它们不这样。C++中的对象工作方式有根本不同。数组中的一个值,该对象将被复制,而不是通过原始离散对象或通过其在数组中的位置访问同一对象。现在有两个完全独立的对象。您可以通过学习如何使用智能指针和使用智能指针来解决此问题。vector
s存储您放入其中的内容的副本。大多数当然,这是一个正确的选择,但有时你需要一个向量,这样你就可以共享一个对象。大多数代码都是不必要的;你可以把它减少到半打行。我可以猜测发生了什么,但我不想筛选所有这些代码来确认。它们是不同的因为C++不是java或C++,你希望C++中的对象像java或C语言那样工作,但是C++中的对象工作方式却有根本不同。当你把一个对象分配给C++中的另一个对象——并且包括把一个离散对象分配给数组中的一个值时,对象就被复制而不是同一个对象ACCE。作为原始离散对象或通过其在数组中的位置。您现在有两个完全独立的对象。您可以通过学习如何使用智能指针和使用智能指针来解决它。我解决了它!谢谢您!非常感谢
0x7ffd10410f90 0x7ffd1040f530