如何在 C++ 中将更改从一个 class 传播到另一个?
How to propagate changes from one class to another in C++?
有这个代码:
#include <iostream>
#include <vector>
#include <string>
class A{
public:
A(std::string const& name) : name(name) {}
std::string const& getName() const {
return name;
}
private:
std::string name;
};
class B{
public:
void add(A const& a){
//vec.emplace_back(a) does not help either
vec.push_back(a);
}
std::vector<A> const& getVec() const {
return vec;
}
private:
std::vector<A> vec;
};
class C{
public:
C(B const& b, A const& a) : a(a), b(b) {}
A const& getA() const {
return a;
}
B& getB() {
return b;
}
private:
A a;
B b;
};
class D{
public:
C& add(C& c){
A const& a = c.getA();
B& b = c.getB();
b.add(a);
vec.push_back(c);
return c;
}
private:
std::vector<C> vec;
};
int main(){
A a1{"first"};
A a2{"second"};
B b;
C c1{b, a1};
C c2{b, a2};
D d;
d.add(c1);
d.add(c2);
for(A const& a : b.getVec()){
std::cout << a.getName() << ' ';
}
}
程序没有输出,但是
我希望输出:
first second
其中 B
class 持有矢量,D
试图通过 class [=16= 修改它 (c.getB().add()
) ].这只是一个简单的例子(在学校项目中遇到),但我想通过这个例子了解 classes.
之间的变化流程
C
的成员不是引用类型。 c1
和 c2
都存储构造函数参数的副本。
所以
d.add(c1);
d.add(c2);
不影响 main
中的 b
,仅影响 c1
和 c2
的成员,它们是原始 b
的副本,a1
和 a2
在 main
.
有这个代码:
#include <iostream>
#include <vector>
#include <string>
class A{
public:
A(std::string const& name) : name(name) {}
std::string const& getName() const {
return name;
}
private:
std::string name;
};
class B{
public:
void add(A const& a){
//vec.emplace_back(a) does not help either
vec.push_back(a);
}
std::vector<A> const& getVec() const {
return vec;
}
private:
std::vector<A> vec;
};
class C{
public:
C(B const& b, A const& a) : a(a), b(b) {}
A const& getA() const {
return a;
}
B& getB() {
return b;
}
private:
A a;
B b;
};
class D{
public:
C& add(C& c){
A const& a = c.getA();
B& b = c.getB();
b.add(a);
vec.push_back(c);
return c;
}
private:
std::vector<C> vec;
};
int main(){
A a1{"first"};
A a2{"second"};
B b;
C c1{b, a1};
C c2{b, a2};
D d;
d.add(c1);
d.add(c2);
for(A const& a : b.getVec()){
std::cout << a.getName() << ' ';
}
}
程序没有输出,但是
我希望输出:
first second
其中 B
class 持有矢量,D
试图通过 class [=16= 修改它 (c.getB().add()
) ].这只是一个简单的例子(在学校项目中遇到),但我想通过这个例子了解 classes.
C
的成员不是引用类型。 c1
和 c2
都存储构造函数参数的副本。
所以
d.add(c1);
d.add(c2);
不影响 main
中的 b
,仅影响 c1
和 c2
的成员,它们是原始 b
的副本,a1
和 a2
在 main
.