Перейти к содержимому

Фотография

Новые уроки по с++. 21 урок. Перегрузка операций

автор денис марков

Сообщений в теме: 5

#1 DenisMD

DenisMD

    Продвинутый пользователь

  • Модераторы
  • 40 сообщений
  • ГородМагнитогорск

Отправлено 22 Июль 2013 - 19:06

В этом уроке мы познакомимся с перегрузкой операций и научимся их перегружать так как мы захотим.


  • SvSerg и Evgeniy это нравится

#2 smull

smull

    Новичок

  • Пользователи
  • Pip
  • 7 сообщений

Отправлено 22 Июль 2013 - 22:05

Полное название книг и их авторы по структурам данным и алгоритмам(которые советовал).



#3 SvSerg

SvSerg

    Новичок

  • Пользователи
  • Pip
  • 1 сообщений

Отправлено 22 Июль 2013 - 22:54

Спасибо, отличный урок получился!



#4 DenisMD

DenisMD

    Продвинутый пользователь

  • Модераторы
  • 40 сообщений
  • ГородМагнитогорск

Отправлено 23 Июль 2013 - 13:48

Полное название книг и их авторы по структурам данным и алгоритмам(которые советовал).

По структурам данных и алгоритмам - это Кнут искусство программирования, лучший из лучших, но там очень сложная подача материала, предполагается, что вы знакомы с каким либо языком программирования, все примеры в книге не на с++, но переделать на ++ очень просто, конечно если понимаешь о чем читаешь



#5 Vuzy

Vuzy

    Новичок

  • Пользователи
  • Pip
  • 3 сообщений

Отправлено 05 Октябрь 2014 - 21:50

не работают функции вывода в поток. Делаю все как на видео, но ругается на оператор  " << "

 

файл time.h

#pragma once
#include <iostream>
typedef unsigned int ui;

class time
{
private:
	ui seconds;
	ui minutes;
	ui hours;
public:
	time(void);
	time(ui);
	time(ui, ui, ui);

	time operator+(const time&) const;
	time operator-(const time&) const;

	int outtimeh()
	{
		return hours;
	}
	int outtimem()
	{
		return minutes;
	}
	int outtimes()
	{
		return seconds;
	}
	friend std::ostream& operator<<(std::iostream& os, time& t);
	


	~time(void);
};

Файл time.cpp

#include "time.h"


time::time(void)
{
	hours = minutes = seconds = 0;
}
time::time(ui sec)
{
	hours= sec / 3600;
	minutes= sec % 3600 / 60;
	seconds = sec % 3600 % 60;
}
time::time(ui h, ui m, ui s)
{
	if (h>24 || m>60 || s>60)
	{
		time::time();
		return;
	}
	else
	{
		hours=h;
		minutes=m;
		seconds=s;
	}
}
time time::operator+(const time& t) const
	{
		time result;
		result.seconds=(seconds + t.seconds) % 60;
		result.minutes=(minutes + t.minutes + ((seconds + t.seconds) / 60)) % 60;
		result.hours=(hours + t.hours + ((minutes + t.minutes)/60));
		return result;
	}
	time time::operator-(const time& t) const
	{
		time result;
		ui s1=(hours*3600)+(minutes*60)+seconds;
		ui s2=(t.hours*3600)+(t.minutes*60)+t.seconds;
		ui s3=s1-s2;
		result.hours= s3 / 3600;
		result.minutes= s3 % 3600 / 60;
		result.seconds = s3 % 3600 % 60;
		return result;
	}
std::ostream& operator<<(std::iostream& os, time& t)
	{
		os << t.hours << ':' << t.minutes << ':' << t.seconds;
		return os;
	}

time::~time(void)
{
}

Файл main.cpp

#include <iostream>
#include <fstream>
#include <conio.h>
#include "time.h"
using namespace std;


void main()
{
setlocale(LC_ALL, "Russian");

time t1(1, 61, 0);
time t2(60);
time t3;
time t4;
t3 = t1+t2;
t4 = t1-t2;

cout << t3 << endl; 
cout << t4 << endl;



 

_getch();
}

ругань следующего характера:

3b0b886F.jpg

 

делал все как показано на видео. старался один в один. скажите где я ошибся. Использую "microsoft visual studio 2010"

 



#6 Evgeniy

Evgeniy

    Новичок

  • Пользователи
  • Pip
  • 9 сообщений

Отправлено 11 Октябрь 2014 - 07:40

  1. std::ostream& operator<<(std::iostream& os, time& t)

В качестве аргумента нужно указывать ссылку на объект ostream, у вас указанно iostream.







Темы с аналогичным тегами автор денис марков