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 типичен. Стор, Дтор и некоторые методы. Я havent разместил объявления метода в заголовке, потому что они не имеют отношения к моей проблеме.Перегрузка объектов и операторов C++
Очень важно, чтобы я обсуждал продолжительность жизни объектов. Это то, что мне действительно нужно понять. Случается, что функция перегрузки оператора затем вызывается, когда я вызываю object_2 в main. Таким образом, то оператор-функция перегрузки называется:
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 всех, прикованных к консоли. Мой объект вышел из сферы действия? Я так думаю, потому что, когда я делаю все это до того, как мне это нужно, он работает нормально. То есть, когда я называю эту функцию n e, где иначе, чем в теле оператора, она перегружается. Я думаю, потому что объект повторно объявлен:
ostream& operator<<(ostream& out, const object_2& obj_2);
затем после того как я напечатать метод форматирования Мне нужно напечатать информацию, которая была передана в от основных до CTOR первого объекта; object_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 называется как у см выше, перегрузка оператора для класса Объект2 будет тогда называться. Я не могу использовать никого из моих личных членов, потому что это незаконная операция. Наверное, мои вопросы. Как я могу напечатать своих частных членов из объекта1 в функции перегрузки оператора object2? static_cast-х? У меня есть случайный фрагмент из основного, его сложный и я не могу его изменить.
ostream& operator<<(ostream& out, const object_2& obj_2)
{
object1::display(out) //Calls method display in object1's I.F.
return out;
}
То, что я пытаюсь сделать, как вы видите выше, вызывает методы других объектов и получает информацию от их. Но эта информация - все NULL !! Im прыгает от одного I.F. к следующему и всему его NULL !!
Я предполагаю, что объект «object1» совпадает с «object_1», но «запас» также «object_1»? И «отображает» статический метод? Кажется, что он статичен в вашем последнем фрагменте кода, но определение (если «фон» и «объект1» одинаковы), похоже, не является статическим методом. Я не знаю, если я еще медленнее, чем обычно, в это раннее воскресное утро, но ваш выбор кода кажется мне немного запутанным. –