原谅这个例子,但在这种情况下:
#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中检索所述数组的内容。
答案 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