C++ 在cpp中处理对象时出错
我对cpp很陌生。我面临以下代码中的问题。C++ 在cpp中处理对象时出错,c++,C++,我对cpp很陌生。我面临以下代码中的问题。 我希望当我从main一次又一次地调用checkyo()时,id的值应该增加。然而,它仍然是一样的 **如果输入 检查is=1 检查is=1 检查is=1 检查is=1 检查is=1 按任意键继续** 但是,我希望输出是 **如果输入 检查is=1 检查is=2 检查is=3 检查is=4 检查is=5 请指出我的错误? #include<iostream> #include<vector> int count1; using n
我希望当我从main一次又一次地调用checkyo()时,id的值应该增加。然而,它仍然是一样的 **如果输入 检查is=1 检查is=1 检查is=1 检查is=1 检查is=1 按任意键继续** 但是,我希望输出是 **如果输入 检查is=1 检查is=2 检查is=3 检查is=4 检查is=5 请指出我的错误?
#include<iostream>
#include<vector>
int count1;
using namespace std;
class A{
int id;
public:
A(){
id=0;
}
void check()
{
++id;
cout<<"check is = " << id << endl;
}
};
class B{
vector<A> v;
public:
void checkyo()
{
if(count1==1)
{
cout<< "Entered if \n" ;
A a;
v.push_back(a);
}
A temp = v.back();
temp.check();
}
};
int main()
{
B b;
count1 =1;
b.checkyo();
count1++;
b.checkyo();
b.checkyo();
b.checkyo();
b.checkyo();
system("pause");
return 0;
}
#包括
#包括
int count1;
使用名称空间std;
甲级{
int-id;
公众:
(){
id=0;
}
无效检查()
{
++身份证;
不能将A temp
更改为A&temp
。您正在复制它,而不是对向量中的一个进行操作。将A temp
更改为A&temp
。您正在复制它,而不是对向量中的一个进行操作。因为在checkyo()函数中,只需将_向后推一次,然后count1就会更改为2,因此v
始终有一个元素在check()函数中输出1
A temp = v.back();
temp.check();
temp始终是v
中最后一个元素的副本,它不是对v的最后一个元素的引用
您可以引用v
的最后一个元素,该元素将为您提供所需的操作:
A &temp = v.back();
temp.check();
因为在checkyo()函数中,只向后推一次,然后count1变为2,所以在check()函数中,v
总是有一个元素输出1
A temp = v.back();
temp.check();
temp始终是v
中最后一个元素的副本,它不是对v的最后一个元素的引用
您可以引用v
的最后一个元素,该元素将为您提供所需的操作:
A &temp = v.back();
temp.check();
在调用check()
之前,您需要创建一个临时对象
A temp = v.back();
temp.check();
此临时对象的id
会递增,但不会递增向量的对象中的id
s
再次调用checkyo()
时,会出现一个新的临时a
,其id
为0
。
如果要增加向量中的最后一个对象,则必须使用对此对象的引用
A &last = v.back();
last.check();
现在,最后一个对象不再被复制,它的id
增加了1
,每次调用checkyo()
在调用check()
之前,您都会创建一个临时对象
A temp = v.back();
temp.check();
此临时对象的id
会递增,但不会递增向量的对象中的id
s
再次调用checkyo()
时,会出现一个新的临时a
,其id
为0
。
如果要增加向量中的最后一个对象,则必须使用对此对象的引用
A &last = v.back();
last.check();
现在,最后一个对象不再被复制,它的id
增加了1
,每次调用checkyo()
我都不明白这一点。:-| v.back()返回向量中最后一个元素的引用。那么,如果临时对象,这个概念会从哪里来呢?@检查从返回的对象
的计数为零。复制并存储在temp
中。复制的.check()
递增为一。复制报告并随后销毁。下一次运行会重新执行,但.check()
永远不会在向量后面的实际对象上调用。它总是只在该对象的副本上调用。(和+1,顺便说一句)。@请检查更新的答案。@WhozCraig好的!我能说**a temp=v.back()**是完全错误的吗?因为,v.back()返回对对象的引用,我应该将其分配给**a&temp**而不是temp?????a temp=v.back()返回对向量中最后一个元素的引用。那么如果临时对象的概念从何而来?@检查从返回的对象。back()
的计数为零。复制并存储在temp
中。副本的检查()
增加到1。副本报告,然后被销毁。下一次运行会重新执行,但是.check()
不会在向量后面的实际对象上调用。它总是只在该对象的副本上调用。(和+1,顺便说一句)。@check请查看更新的答案。@WhozCraig好的!我能说**a temp=v.back()**完全错误。因为,v.back()返回对对象的引用,我应该将该引用分配给**a&temp**而不是temp?????a temp=v.back()
使副本不是引用。。。。