从数组中检索对象的值?

时间:2015-10-21 02:13:24

标签: c++ arrays

原谅这个例子,但在这种情况下:

#include <iostream>
#include <string>

using namespace std;

class A { 
private:
    string theName;
    int theAge;
public:
    A() : theName(""), theAge(0) { }
    A(string name, int age) : theName(name), theAge(age) { }
};

class B {
private:
    A theArray[1];
public:
    void set(const A value) {theArray[0] = value; }
    A get() const { return theArray[0]; } 
};

int main()
{
    A man("Bob", 25);
    B manPlace;
    manPlace.set(man);
    cout << manPlace.get();
    return 0;
}

当我调用manPlace.get()时,是否有可能在main中检索“man”对象的内容?我打算在调用manPlace.get()时打印名称(Bob)和年龄(25)。我想将一个对象存储在另一个类的数组中,我可以在main中检索所述数组的内容。

1 个答案:

答案 0 :(得分:0)

您需要在A类上定义一个ostream::operator<<来实现这一点 - 否则应该生成年龄和名称作为文本输出生成的格式是未定义的(并且它们是您A类的私有成员)。 / p>

查看ostream::operator<<的参考资料。对于您的A类,可以像这样定义这样的运算符:

std::ostream& operator<< (std::ostream &out, A &a) {
  out << "Name: " << a.theName << std::endl;
  out << "Age: " << a.theAge << std::endl;
  return out;
}

会输出类似的内容:

Name: XX
Age: YY

所以你的完整代码是:

#include <iostream>
#include <string>

using namespace std;

class A {
private:
  string theName;
  int theAge;
public:
  A() : theName(""), theAge(0) { }
  A(string name, int age) : theName(name), theAge(age) { }
  friend std::ostream& operator<< (std::ostream &out, A &a) {
    out << "Name: " << a.theName << std::endl;
    out << "Age: " << a.theAge << std::endl;
    return out;
  }
};

class B {
private:
  A theArray[1];
public:
  void set(const A value) { theArray[0] = value; }
  A get() const { return theArray[0]; }
};

int main()
{
  A man("Bob", 25);
  B manPlace;
  manPlace.set(man);
  cout << manPlace.get();
  return 0;
}

将输出:

Name: Bob
Age: 25