有這個代碼:
#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持有向量,并D試圖c.getB().add()通過 class 修改它()C。這只是一個簡單的例子(在學校專案中遇到),但我想通過這個例子了解班級之間的變化流程。
uj5u.com熱心網友回復:
C的成員不是參考型別。兩者c1和c2都存盤建構式引數的副本。
所以
d.add(c1);
d.add(c2);
不影響bin ,只影響andmain的成員,它們是原始和in的副本。c1c2ba1a2main
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/440078.html
