设置类对象的成员数据

时间:2014-04-27 18:36:54

标签: c++ object

我在理解为什么我不能在另一个对象中设置成员对象的字符串时遇到一些麻烦。这是仅提供空白输出的特定行: cout<< c1.getC2()。getS2()<< ENDL; 任何帮助将不胜感激。

#include <iostream>
#include <time.h>
#include <stdlib.h>
#include <sstream>
#include <string>
using namespace std;


class class2 {
  string s2;
  public:
         string getS2() const {return s2;};
         void setS2(string s) {s2.assign(s);};    
};

class class1 {
  string s1;
  class2 c2;
    public:
      string getName() const {return s1;};
      void setName(string s) {s1 = s;};
      class2 getC2() const {return c2;};
      void setC2(class2 c) {c2 = c;};
};

int main() {
  class1 c1;
  class2 c2t;
  string input;
  getline(cin, input);
  cout << "input: " << input << endl;
  c1.getC2().setS2(input);
  cout << c1.getC2().getS2() << endl;//This line is always blank
  //c2t = c1.getC2();
  //c2t.setS2(input);
  //c1.setC2(c2t);
  //cout << c1.getC2().getS2() << endl;

 cin.get();   
}

1 个答案:

答案 0 :(得分:3)

c1.getC2()会返回副本

因此,当您执行c1.getC2().setC2(input)时,您正在副本上调用setC2,并且该更改会立即丢失。

查看引用以了解您的成员函数。