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

Наследование и перегрузка операторов. - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Реферат http://www.cyberforum.ru/cpp-beginners/thread166874.html
Получил задание, сделать Реферат по теме "Классы Конструкторы и Деструкторы в С++" Самого реферата я не нашёл, так что нужно сделать самому. Прошу посоветовать Книгу, откуда можно взять эту инфу, изложенную в доступной для понимания форме. Заранее спасибо
C++ В одномерном массиве, состоящем из N вещественных элементов, вычислить В одномерном массиве, состоящем из N вещественных элементов, вычислить: 1. максимальный по модулю элемент массива; 2. сумму элементов массива, расположенных между первым и вторым положительными элементами. Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных. http://www.cyberforum.ru/cpp-beginners/thread166869.html
В одномерном массиве , состоящем из N целых элементов , вычислить : C++
В одномерном массиве , состоящем из N целых элементов , вычислить : 1. минимальный по модулю элемент массива ; 2. сумму модулей элементов массива , расположенных после первого элемента , равного нулю. Преобразовать массив таким образом, чтобы в первой его половине располагались элементы , стоявшие в четных позициях, а во второй половине — элементы , стоявшие в...
C++ Не открывается файл
#include <iostream> #include <fstream> #include <string> #include <cstdlib> using namespace std; const int INITIAL_LIST_CAPACITY = 10; void build_wordlist (string* &word_list,int capacity, string filename) {
C++ Не получается переложить код с языка C# на язык С http://www.cyberforum.ru/cpp-beginners/thread166865.html
Подскажите пожалуйста, как переложить этот код на язык С using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program {
C++ Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX. Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX. F=ax^2+b*b*x при a < 0 и x неравно 0 F= x-(a/x-c) при a > 0 и x = 0 1+x/c в остальных случаях где a, b, c - действительные числа. подробнее

Показать сообщение отдельно
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
19.09.2010, 11:24     Наследование и перегрузка операторов.
Цитата Сообщение от Nameless One Посмотреть сообщение
А чем плохо мое решение?
Я не говорю, что оно плохо, но оно как раз изменяет условия, изменяет изначально заданный интерфейс. То же самое имел в виду и я: необходимы небольшие, но продуманные изменения в интерфейсе (введение конструктора из базового типа), которые делают задачу тривиальной.

Добавлено через 10 минут
Традиционные рекомендации для перегрузки арифметических операторов таковы:
а) Делайте операторы членами класса.
б) Переопределяйте в первую очередь операторы, связанные с присваиванием (+=, *= и т.д.)
в) Основные операторы (+, -, *, /) реализуются через то, что сделано в б)
г) Операторы из предыдущего пункта не изменяют первый операнд, поэтому делаются как const; операторы из б) неконстантны.
д) Операторы из б) возвращают ссылку на изменённый первый операнд, основные операторы возвращают новое значение через стек.
Пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class MyInt{
public:
    MyInt(int value=0): v(value) {}
    MyInt& operator += (const MyInt& op2) 
    {
        v += op2.v;                                 // Добавляем второй операнд
        return *this;                                // Возвращаем ссылку на первый операнд
    }
    MyInt operator + (const MyInt& op2) const
    {
        MyInt returnValue(*this);  // Создаём новый объект MyInt, копируя данные из первого операнда
        returnValue += op2;         // Прибавляем второй операнд
        return returnValue;          // Возвращаем по значению
    }
private:
    int v;
};
Добавлено через 14 минут
Теперь, если мы посчитаем, что операторы в myfloat и saturation реализованы в соответствии с рекомендациями, достаточно ввести конструктор, порождающий saturation от myfloat:
C++
1
saturation::saturation(const myfloat &src, bool flag_=false): myfloat(src), flag(flag_) {}
И вот в таких условиях можно вообще уже не перегружать арифметические операторы в saturation, если от них нам нужна только та функциональность, что уже есть в myfloat. Ну а если нам надо по результатам операции устанавливать флаг, то это можно реализовать примерно так:
C++
1
2
3
4
5
6
7
8
9
10
11
saturation& saturation::operator += (const saturation& op2)
{
    static_cast<myfloat&>(*this) += op2;
    flag = true;
    return *this;
}
 
saturation saturation::operator + (const saturation& op2) const
{
    return saturation(static_cast<myfloat&>(*this)+op2, true);
}
 
Текущее время: 12:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru