Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.06.2009, 15:37   #1
Наташенька
Пользователь
 
Аватар для Наташенька
 
Регистрация: 20.12.2008
Сообщений: 26
По умолчанию operator<<

Добрый вечер! Помогите, пожалуйста, написать оператора << для производного класса

Код:
#include <iostream>
#include <cmath>
#include <stdio.h>
using namespace std;

class X{
int e;
double r;
char *g;
public:
	X(int E=0, double R=0, char *G=0 ){e=E;r=R;g=new char[10];strcpy(g, G);}
	
    X operator=(X &P)
	{if (&P != this) 
	{e=P.e;
	r=P.r;
    delete[]this->g;
	this->g=new char[10]; 
	strcpy(this->g, P.g);}}

int get_e()const {return e;};
double get_r()const {return r;};
const char* get_g()const {return g;};
friend ostream& operator<<(ostream& f, X& s);
};
ostream& operator<<(ostream& f, X& s)
{f<<s.e<<" "<<s.r<<" "<<s.g<<endl;
return f;}

template<class D>
class XX:public X
{D w;
public:
	XX(int E, double R, char *G, D W=0): X(E, R, G){D w=W;}

};

void main()
{X D(0,3.14,"dgtr");
XX <int>C(4,7," ",5);
X V=D;
cout<<D;
cout<<C;
}
Наташенька вне форума Ответить с цитированием
Старый 08.06.2009, 16:05   #2
Наташенька
Пользователь
 
Аватар для Наташенька
 
Регистрация: 20.12.2008
Сообщений: 26
По умолчанию

Ну может так? .....

....
Код:
D get_w()const{return w;};
};
ostream& operator<<(ostream& f,  XX <int> & s)
{cout<<"w "<<s.get_w()<<endl;
	f<<s.get_e()<<" "<<s.get_r()<<" "<<s.get_g()<<" "<<s.get_w()<<endl;
return f;}
.....

Код:
XX <int>C(4, 7, " ", 5);
только печатается что-то странное...
Наташенька вне форума Ответить с цитированием
Старый 08.06.2009, 16:18   #3
Наташенька
Пользователь
 
Аватар для Наташенька
 
Регистрация: 20.12.2008
Сообщений: 26
По умолчанию

Короче, понятно тут ошибка в конструкторе!
Код:
XX(int E, double R, char *G, D W=0): X(E, R, G){D w=W;}
-w уже определён,
надо было так:
{w=W;}

А можно сделать так, чтобы для типа double operator<< не переписывать?

Последний раз редактировалось Sazary; 08.06.2009 в 16:27.
Наташенька вне форума Ответить с цитированием
Старый 08.06.2009, 16:26   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от Наташенька
А можно сделать так, чтобы для типа double operator<< не переписывать?
Код:
 friend ostream& operator<<(ostream& f,  XX<D> & s)
 {
  cout<<"w "<<s.get_w()<<endl;

 f<<s.get_e()<<" "<<s.get_r()<<" "<<s.get_g()<<" "<<s.get_w()<<endl;
return f;}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 08.06.2009, 18:46   #5
Наташенька
Пользователь
 
Аватар для Наташенька
 
Регистрация: 20.12.2008
Сообщений: 26
По умолчанию

Спасибо большое!
А можно в производном классе определить ещё один элемент
напр:
Код:
...
D h;
public:
XX(int E, double R, char *G, D W=0, D H=0): X(E, R, G){w=W; h=H;}
...};
и сделать так, чтобы w и h работали в разных типах, например в int и double?!
Наташенька вне форума Ответить с цитированием
Старый 08.06.2009, 18:53   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Что-то вроде этого:
Код:
template<class D, class E>
class XX : public X
Код:
D w;
E h;
public:
XX(int E, double R, char *G, D W=0, E H=0): X(E, R, G){w=W; h=H;}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 08.06.2009, 18:59   #7
Наташенька
Пользователь
 
Аватар для Наташенька
 
Регистрация: 20.12.2008
Сообщений: 26
По умолчанию

Ага! А в мэйне получается
Код:
XX <int, double>C(4,7," ", 5, 6.6);
что-то типа этого
спасибо
Наташенька вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
operator++ prikolist Общие вопросы C/C++ 17 15.01.2013 16:17
operator= для NULL Selebro Общие вопросы C/C++ 2 14.12.2008 16:29
Operator C++ EfiopianDIMON Общие вопросы C/C++ 1 13.12.2008 16:52
Delphi + dll= Invalid Pointer Operator LEKA Общие вопросы Delphi 4 01.05.2007 23:38