Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
0 / 0 / 0
Регистрация: 01.04.2016
Сообщений: 11
1

Параметр и аргумент функции разных типов, но код работает

09.06.2016, 15:01. Просмотров 464. Ответов 2
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <iostream>
#include <fstream>
using namespace std;
 
class dist
{
private:
    int feet;
    float inch;
public:
    dist( ) : feet( 0 ), inch( 0 ) { }
    dist( int f, float i ) : feet( f ), inch( i ) { }
 
    friend istream& operator>> ( istream&, dist& );
    friend ostream& operator<< ( ostream&, dist& );
};
istream& operator>>( istream& s, dist& d )
{
    char ch;
    s >> d.feet >> ch >> d.inch;
 
    return s;
}
ostream& operator<<( ostream& s, dist& d )
{
    s << d.feet <<"/"<<d.inch;
 
    return s;
}
int main( )
{setlocale(LC_ALL,"rus");
 
dist d1; 
 
ofstream fileOUT( "bifile.txt", ios :: binary );
 
cin >> d1;
fileOUT << d1;
 
fileOUT.close( );
 
ifstream fileIN( "bifile.txt", ios :: binary );
 
fileIN >> d1;
cout << d1;
 
 
return 0;
}
Добрый день. Это пример из учебника Лафоре: Перегрузка << и >> для файлов. Например в строке 38 вызывается перегруженный оператор <<, fileOUT - это первый аргумент оператора, а объект d1 - это второй аргумент оператора. Так вот аргумент fileOUT имеет тип ofstream , но если взглянуть в саму функцию( перегруженный оператор ), там параметр, которому передается этот аргумент имеет тип ostream . Расскажите, пожалуйста, подробно, почему в этом случае код работает корректно?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.06.2016, 15:01
Ответы с готовыми решениями:

Аргумент разных типов для одной функции (без перегрузки)
День всем добрый! Я тут решил немного облегчить себе жизнь. У меня есть функция: void...

Нахождение разных типов предложений (доделать код)
Задание: нужно найти все предложения в строке , которые заканчиваются на !.? ( ну вообщем...

Комбинация разных типов аргументов функции
Есть функция, принимающая производное количество аргументов: def Out(*args): if _STOUT_ or...

Реализовать перегрузку функции, определяющую максимальное значение в массивах разных типов
Добрый день. Пытаюсь разбираться с перегрузкой функций. стоит задача &quot;Используя перегрузку...

2
1206 / 730 / 166
Регистрация: 05.12.2015
Сообщений: 2,145
09.06.2016, 18:21 2
Цитата Сообщение от Eragorn2013 Посмотреть сообщение
Расскажите, пожалуйста, подробно, почему в этом случае код работает корректно?
ofstream от него унаследован, и в качестве параметра передается ссылка на базовый класс.
1
29 / 29 / 18
Регистрация: 20.12.2010
Сообщений: 119
09.06.2016, 18:36 3
ofstream наследует класс ostream. В функцию << можно передавать любого наследника класса ostream: ostringstream, stringstream, fstream, ofstream, iostream.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.06.2016, 18:36

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Используя механизм перегрузки функции, вычислить для разных типов параметров
Используя механизм перегрузки функции, разработать и отладить программу вычисление значения = f...

Создание шаблонной функции для работы с массивами разных типов данных
Здравствуйте. Столкнулся со следующей проблемой: не могу написать шаблонную функцию подсчета суммы...

Сложный запрос в функции (Dcount) возвращает ошибку 3072 "Недопустимый аргумент функции", но в виде таблицы работает
Здравствуйте. Корректирую базу учета рабочего времени. В базе есть таблица сотрудников, таблица...

Создать массивы разных типов(3 типов), вывести их на экран
Создать массивы разных типов(3 типов), вывести их на экран.

Передавать в метод аргумент различных типов
Я хочу сделать так, чтобы метод мог принять на вход аргумент, притом различных типов, вида...

На разных машинах код работает по разному
Здравствуйте. Есть вот такой фрагмент кода, который должен из строки делать число: double...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.