C++ 通过类引用访问和更改向量
这是我能解决的最简单的问题,抱歉,长度太长了:C++ 通过类引用访问和更改向量,c++,reference,vector,C++,Reference,Vector,这是我能解决的最简单的问题,抱歉,长度太长了: #include <vector> #include <iostream> class Bar { private: std::vector<int> intVector_; public: Bar() {}; void addInt(int newInt) { intVector_.push_back(newInt); std::cout
#include <vector>
#include <iostream>
class Bar
{
private:
std::vector<int> intVector_;
public:
Bar() {};
void addInt(int newInt)
{
intVector_.push_back(newInt);
std::cout << intVector_.size() << " ";
};
int getIntVectorSize() { return intVector_.size(); };
};
class Foo
{
private:
Bar bar_;
public:
Foo() { bar_ = Bar(); };
Bar getBar() { return bar_; };
};
int main(char argc, char* argv[])
{
Foo foo = Foo();
foo.getBar().addInt(1);
std::cout << foo.getBar().getIntVectorSize() << " ";
foo.getBar().addInt(2);
std::cout << foo.getBar().getIntVectorSize() << " ";
foo.getBar().addInt(3);
std::cout << foo.getBar().getIntVectorSize() << " ";
}
我对C++和所有的引用/指针业务都比较陌生,所以我很难确定如何解决这个问题,或者这是可能的。谢谢你的帮助 这是因为getBar按值返回一个Bar,它为函数的每次调用生成Bar_u的副本,并且您正在修改临时变量的向量
您可以通过返回引用来避免这种情况:
class Foo
{
private:
Bar bar_;
public:
Foo() { bar_ = Bar(); }; // you prob. want to use an initialiser list btw.
Bar& getBar() { return bar_; };
// ^ notice the ampersand
};
这样,对getBar返回值所做的任何修改都是在bar上完成的,而不是在语句末尾销毁的临时副本。我知道可能是我在做傻事。:谢谢你迅速的回答。
class Foo
{
private:
Bar bar_;
public:
Foo() { bar_ = Bar(); }; // you prob. want to use an initialiser list btw.
Bar& getBar() { return bar_; };
// ^ notice the ampersand
};