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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.03.2013, 22:29   #1
Jugger
Пользователь
 
Регистрация: 30.01.2008
Сообщений: 99
По умолчанию Как правильно перегрузить << cout ?

Попытался перегрузить << в классе user_type
Говорит слишком много параметров
Пробовал ostream объявлять внутри тела перегрузки но не получается инициализировать
Как правильно сделать ?
Код:
// stl.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
#include<iostream>
#include "conio.h"
#include <deque>
#include "time.h"



using namespace std;

class user_type{
public:
	user_type(int k){
		value=k;
	}
	ostream& operator<<( ostream& os, const user_type& c )
{
   
      os << c.value ;
  
   return os;
}
	int get(){
		return value;
	}



	
private:
	int value;
};

template< class T > void deque2(){
	deque <T> c,cc;
	int n;
	c.push_back(7);
	c.push_front(9);
	cout<<"Deque size : "<<c.size()<<endl<<"Elements : "<<c.front()<< " "<<c.back();
	cout<<endl<<endl<<"****** Changing elements *******"<<endl<<endl;
	c.pop_back();
	c.pop_front();
	for (T i=0; i<11; i++) c.push_back(i); 
	deque<T>::iterator it = c.begin();
	cout<<"Deque size : "<<c.size()<<endl<<"Elements : ";
  while (it != c.end())
    cout << ' ' << *it++;
  for (T i=0; i<7; i+=2) cc.push_back(i); 
  cout<<endl<<endl<<"Enter n - position from where delete elements"<<endl;
  cin>>n;
  cout<<"Elements after "<<n<<" position was deleted and elements from deque 2 added to deque 1"<<endl<<endl;
  c.erase (c.begin()+n,c.end());
  it = c.end();
  deque<T>::iterator it2 = cc.begin();
   while (it2 != cc.end())
    c.push_back(*it2++);
   cout<<endl<<endl<<"Deque1 size : "<<c.size()<<endl<<"Elements : ";
   it = c.begin();
   while (it != c.end())
    cout << ' ' << *it++;
   cout<<endl<<endl<<"Deque2 size : "<<cc.size()<<endl<<"Elements : ";
   it2 = cc.begin();
   while (it2 != cc.end())
    cout << ' ' << *it2++;
	_getch();
}


sort(fff.begin(),fff.end());
int main(){
	bool run=1;
	int sel;
	while(run){
		system("cls");
		cout<<"Menu:"<<endl<<"1. program 1"<<endl<<"2. program 2"<<endl<<"3. program 3"<<endl<<"4. Exit"<<endl;
		cin>>sel;
		switch(sel){
		case 1: {
			deque2<float>();
			break;
				}
		case 2:{
			
			deque2<user_type>();
			break;
				}
		case 3:{
			
			break;
				}
		case 4:{
			run=0;
			break;
				}
		}
	}
}
Jugger вне форума Ответить с цитированием
Старый 13.03.2013, 00:40   #2
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Если ты сделаешь оператор членом класса - первым аргументом у него всегда будет объект этого класса. Следовательно, он будет срабатывать только в случаях class << something. Потому единственный способ добиться того, чтобы оператор вызывался при наличии объекта другого типа слева - сделать его friend-функцией.
Son Of Pain вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как перегрузить оператор ввода? julia9311 Общие вопросы C/C++ 5 17.01.2013 19:33
Как правильно перегрузить логические операции? julia9311 Общие вопросы C/C++ 8 15.01.2013 13:44
cout., cin., cout.setf, cout.unsetf kineziz Общие вопросы C/C++ 1 06.05.2012 02:50
Есть код,как правильно перегрузить конструктор -ushёl- Общие вопросы C/C++ 9 08.07.2010 10:32