【发布时间】:2011-08-17 03:09:03
【问题描述】:
class object_1
{
public:
...
friend ofstream& operator<<(ofstream &out, const object_1 &obj_1);
friend object_2;
private:
char *pCh_mem1;
char *pCh_mem2;
int *pInt_mem1;
int *pInt_mem2;
};
class object_2
{
public:
...
friend ofstream& operator<<(ofstream &out, const object_2 &obj_2);
friend object_1;
};
Object1 的实现文件是典型的。 Tor,Dtor和一些方法。我没有在标题中发布方法声明,因为它们与我的问题无关。
我讨论对象的生命周期非常重要。这是我真正需要理解的东西。发生的事情是,当我在 main 中调用 object_2 时,将调用运算符重载函数。于是就调用了算子重载函数:
ostream& operator<<(ostream& out, const object_2& obj_2)
{
object1::display(out) //Calls method display in object1's I.F.
return out;
}
我们在这里:
void object_1::display(std::ostream &out)
{
out << left << setw(28) << "Person" << setw(20) << "Place" ;
out << right << setw(5) << "Thing" << setw(5) << "Idea" << endl;
out << left << setw(28) << "----" << setw(20) << "--------" ;
out << right << setw(5) << "----- " << setw(5) << "------" << endl;
}
实现文件的顶部是 IOMANIP 库。所以 setw(X) 和一切都被定义了。我将 0 全部打印到控制台。我的对象是否超出范围?我是这么认为的,因为当我在需要之前完成所有这些工作时,效果很好。也就是说,当我在运算符重载主体之外的其他地方调用此函数时,它会起作用。我想是因为对象被重新声明了:
ostream& operator<<(ostream& out, const object_2& obj_2);
然后在我打印格式化方法之后,我需要打印从 main 传递到第一个对象的 ctor 的信息;对象_1。发生这种情况时,我们处于相似的重载函数及其相同的实现文件中。我从第二个对象重载函数中的重载调用这两种方法:
ostream& operator<<(ostream& out, const object_1& obj_1)
{
out << obj_1.pCh_mem1 << obj_1.pCh_mem2;
return out;
}
// 主要 object_2 obj_2(4);
static void method1()
{
//do stuff
}
static void method2()
{
//do stuff
}
static void method3()
{
//do stuff
}
int main(void)
{
method1();
method2();
method3();
cout << obj_2;
return 0; // and such
}
一旦 objc_2 像你上面看到的那样被调用,object2 的类的操作符重载就会被调用。我不能使用我的任何私人成员,因为它是非法操作。我想我的问题是。如何在我的对象 2 的运算符重载函数中从对象 1 打印我的私有成员? static_cast 的?我有一个来自 main 的随机 sn-p,它很复杂,我无法更改。
ostream& operator<<(ostream& out, const object_2& obj_2)
{
object1::display(out) //Calls method display in object1's I.F.
return out;
}
正如您在上面看到的,我一直在尝试做的是调用其他对象的方法,并从它们那里获取信息。但是那个信息都是NULL!!我从一个 I.F.到下一个,它都是NULL!
【问题讨论】:
-
我假设“object1”与“object_1”相同,但“stock”也是“object_1”吗? “显示”是一种静态方法吗?在您上一个代码 sn-p 中的调用中似乎是静态的,但定义(如果“stock”和“object1”相同)似乎不是静态方法。我不知道这个星期天早上我是不是比平时还要慢,但是你选择的代码让我有点困惑。
标签: c++