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

Как переопределить перегруженную функцию в производном классе? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Сохранить таблица результатов игры в файл http://www.cyberforum.ru/cpp-beginners/thread1618910.html
Сделал маленькую игрушку в c++. Там имеется меню, и есть папка 'Результаты'. Во время игры туда должна записываться переменная, типа ходы, за которые смог выиграть. Понимаю что это надо делать через fstream. Как мне сделать, чтобы в блокнот записывалось, и потом его содержимое выводилось бы в консоль? Ведь блокнот все время очищается...
C++ Вычислить двойной интеграл методом прямоугольников программа для решения задачи вычисления двойного интеграла методом прямоугольников. в С++ напишите полностью пожалуйста http://www.cyberforum.ru/cpp-beginners/thread1618899.html
C++ Найти строки, у которых диагональный элемент больше суммы всех остальных
2. Дан квадратный двумерный массив A размера nxn. Сформировать одномерный массив B, куда записать номера тех строк A, у которых диагональный элемент больше суммы всех остальных.
Найти номера двух точек, расстояние между которыми наибольшее C++
Надеюсь сможет кто-нибудь помочь, буду премного благодарен :) 1. Даны координаты точек на плоскости: x1, y1,...,xn,yn. Найти номера двух точек, расстояние между которыми наибольшее (считать, что такая пара точек единственная).
C++ Получить матрицу B(n,n) из матрицы А по формуле http://www.cyberforum.ru/cpp-beginners/thread1618876.html
Получить матрицу B(n,n) из матрицы А по формуле. П.5.18.Правил Запрещено размещать задания и решения в виде картинок и других файлов с их текстом. Редактор формул внизу страницы
C++ Взаимодействие процессов, обмен сообщениями через порт Народ, нужна помощь с лабораторной работой. Нужна вот такая программа на С++: "Вычислить f (x) * g (x), используя 2 вспомогательных процесса: один вычисляет f (x), а другой - g (x). Основная программа выполняет ввод-вывод и операцию *. Использовать обмен сообщениями между процессами через порт (Socket). Реализовать вариант неблокирующих операций обмена сообщениями, то есть с "прерыванием"... подробнее

Показать сообщение отдельно
hoggy
5230 / 2121 / 404
Регистрация: 15.11.2014
Сообщений: 4,812
Завершенные тесты: 1
19.12.2015, 22:00     Как переопределить перегруженную функцию в производном классе?
Цитата Сообщение от zss Посмотреть сообщение
Поскольку экземпляр базового класса создать нельзя,
то и ошибки никогда не будет.
http://rextester.com/COIRI58145


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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#include <iostream>
#include <stdexcept>
 
#ifndef OUT_TO_STREAM
    #define OUT_TO_STREAM(type_)  \
        template<class T>friend   \
        ::std::basic_ostream<T>&  \
        operator<<(::std::basic_ostream<T>& os, const type_& obj )
#endif
 
 
 
struct Number {
    
    virtual ~Number(){}
    
    virtual std::string AboutMe()const = 0;
 
    virtual const Number& operator+=(const Number&)=0;
    
    OUT_TO_STREAM(Number)
    {
        return os<< obj.AboutMe();
    }
};
 
 
struct Int : Number {
    
    int x;
 
    Int(const int X=0) : x(X) {}
    const Number& operator+=(const Number& N) 
    {
        const auto* valid = dynamic_cast<const Int*>(&N);
        
        if(!valid)
            throw std::logic_error("invalid cast of type");
        
        x += valid->x;
        return *this;
    }
    
    virtual std::string AboutMe()const 
    {
        return std::to_string(x);
    }
};
 
struct Float : Number {
    float x;
 
    Float(const float X=0) : x(X) {}
    const Number& operator+=(const Number& N) 
    {
        const auto* valid = dynamic_cast<const Float*>(&N);
        
        if(!valid)
            throw std::logic_error("invalid cast of type");
        
        x += valid->x;
        return *this;
    }
    
    virtual std::string AboutMe()const 
    {
        return std::to_string(x);
    }
};
 
 
void plus(Number& l, const Number& r)
{
    l += r;
}
 
void simulate_error()
{
    try{
        
        Int i(10);
        Float f(10);
        plus(i,f);
        
    }
    catch(const std::exception& e)
    {
        std::cout<<"detected error: "<< e.what();
    }
}
 
int main()
{
    std::cout << "Hello, world!\n";
    
    Int val1(10);
    Int val2(10);
    
    std::cout << "before: val1 = " << val1<< '\n';
    
    plus(val1,val2);
    
    std::cout << "after : val1 = " << val1<< '\n';
    
    simulate_error();
    
}
 
Текущее время: 05:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru