Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Дроби - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Программа вычисления обратной матрицы N-го порядка http://www.cyberforum.ru/cpp-beginners/thread353914.html
Составить программу вычисления обратной матрицы методом Гаусса для трехдиагональной матрицы. Порядок и коэффициенты матрицы (главная и соседние с ней диа-гонали) вводятся из файла. В файл результатов...
C++ Функции и что делают У меня есть такая полностью написанная программа по Файловому менеджеру .нужно определить что делает каждая функция... помогите мне.пожалуйста.я мало что... http://www.cyberforum.ru/cpp-beginners/thread353902.html
Тема дипломной C++
Никак не могу придумать тему дипломной работы. А Вы на какие темы дипломы писали?
intellij Idea 10.5.2 C++
Не могу понять...какого черта тут нужно делать...ни одну из папок не хочет добавлять http://imagepost.ru/images/q/yb/qybyszmudbenpzmpzyexytunmcwvia.png
C++ Сортировка строк STL http://www.cyberforum.ru/cpp-beginners/thread353886.html
Подскажите пожалуйста как работает эта программа #include <iostream> #include <string> #include <algorithm> using namespace std; char*...
C++ Не рабочий merge() Подскажите пожалуйста почему данная программа напрочь отказывается работать ? #include<iostream> #include<algorithm> using namespace std; int art={5,2,3,6,8}; int bar={10,20,30,40,50}; int... подробнее

Показать сообщение отдельно
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
21.09.2011, 16:13
Цитата Сообщение от lavengerl Посмотреть сообщение
зачем создаются эти переменные?
top - верхняя часть дроби, bottom - нижняя. Числитель и знаменатель это.

Цитата Сообщение от lavengerl Посмотреть сообщение
Каким образом используються эти конструкторы? я такого синтаксиса никогда еще не видел)
Rational( int _top = 1, int _bottom = 1 ) : top(_top), bottom(_bottom) { };

Параметры с присвоением - это параметры по-умолчанию. То есть, если вы не указали их при вызове функции (в данном случае - при создании объекта), используются указанные здесь значения. После двоеточия - вызов других конструкторов. То есть, переменная top инициализируется значением _top, переменная bottom - значением _bottom. Да, встроенные типы тоже можно инициализировать конструкторами.

Rational( const Rational& r ) : top( r.top ), bottom( r.bottom ) { };
Конструктор копирования. В качестве аргумента передаётся ссылка на другой объект типа Rational. В части конструкторов видно, что вы копируем данные из этого переданного объекта в создаваемый.

То есть можно:

C++
1
2
Rational rat1( 1, 2 ); // 1/2
Rational rat2( rat1 ); // 1/2
Цитата Сообщение от lavengerl Посмотреть сообщение
Зачем ввод-вывод делать так?) не проще ли cin, cout? И что значит "friend std::"
cin не врубится в объект типа Rational. То есть cin >> rat1; оно не поймёт, так же, как и cout << rat1;. Эти функции помогают cin'у понять такое выражение.

friend говорит о том, что эта функция имеет доступ к закрытым частям класса.

std::ostream - это объект ostream из пространства имён std. То есть мы возвращаем ссылку на объект типа std::ostream

Цитата Сообщение от lavengerl Посмотреть сообщение
Что делает эта функция? что такое Rational & Rational? и что такое r.bottom;
C++
1
2
3
4
5
6
7
Rational & Rational::operator+= ( const Rational &r )
{
    // согласно условию
    top = top * r.bottom + bottom * r.top;
    bottom *= r.bottom;
 
    return *this;
Rational & - это тип возвращаемого значения. Ссылка на объект типа Rational.
Rationa::operator+= - это имя функции из класса Rational.
( const Rational &r ) - это параметр, который она принимает. Ссылка на объект типа Rational.

r.bottom - это переменная bottom из объекта r (см. параметры функции)
bottom - это переменная из текущего объекта

return *this; - возвращается ссылка на себя.

Цитата Сообщение от lavengerl Посмотреть сообщение
Что и от кого принимает эта функция? И кому возвращает?
C++
1
2
3
4
5
6
Rational operator+ ( const Rational &r1, const Rational &r2 )
{
    Rational r = r1;
    r += r2;
    return r;
}
Принимает ссылки на два объекта типа Rational. Возвращает результат их сложения. В выражении

C++
1
2
3
Rational a(1, 2);
Rational b(2, 4);
Rational c = a + b; /* вот тут происходит её вызов. a попадает в первый параметр, b - во второй. Возвращаемое значение присваивается c.*/
Цитата Сообщение от lavengerl Посмотреть сообщение
опять же вывод то что вывод понял но как он действует нет.. Ибо всегда чтоб вывести просто писал cout<<...
cout - это объект типа ostream, привязанный к выводу на stdout (стандартный вывод). Однако, ofstream file( "file.txt" ); - это тоже объект ostream (ofsteram наследуется от ostream). Соответственно, можно сделать так: cout << rat1; file << rat1; Есть много типов, которые наследуют от ostream. Эта функция учит их все работать с типом Rational.

Цитата Сообщение от lavengerl Посмотреть сообщение
тут если можно т опострочно, ато ниодно слово неясно)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// ввод
// формат:
// 1/2  1  / 4  12/ 258
std::istream & operator>>( std::istream &is, Rational &r )
{
    int top;
    is >> top; // из is вводим число в top
 
    char ch;
    is >> ch; // далее вводим следующий символ (кроме пробелов, переносов, табов и так далее)
 
    if( ch != '/' ) // если этот символ - не прямой слэш
    {
       is.setstate( std::ios::failbit ); // то произошла ошибка при вводе числа : формат не соблюдён
       return is; // выходим
    }
 
    is >> r.bottom; // если слеш найден, вводим нижнюю часть числа
    r.top = top; // и обновляем верхнюю из переменной top
 
    return is; // возвращаем is
}
Цитата Сообщение от lavengerl Посмотреть сообщение
тут впринципе ясно но когда создавал экземпляр то обычно писал имя класса::омя обьекта, а тут имя неймспейса::и cout. не ясно.
Я не писал using namespace std;, поэтому мне нужно было вручную указывать, что те-то объекты и те-то типы находятся в пространстве имён std.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru