Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Показать сообщение отдельно
zss
Модератор
Эксперт С++
7258 / 6703 / 4244
Регистрация: 18.12.2011
Сообщений: 17,693
Завершенные тесты: 1
05.07.2016, 08:31 0

Полиморфизм

05.07.2016, 08:31. Просмотров 478. Ответов 5
Метки (Все метки)

Ответ

nfnicolas, Тут дело не в полиморфизме, а в том, что Вы неправильно организовали данные.

В базовый класс заносите данные, которые являются общими для всех наследуемых классов.
В данном случае помещая a,b в базовый класс можно рассчитывать на то, что они будут, например, ее максимальными размерами.

В производный класс заносите дополнительные данные.
Для прямоугольника они не понадобятся, а для трапеции понадобится дополнительный параметр.
Какой - опять зависит от Вас. Но a,b должны остаться размером прямоугольника, в который эта трапеция вписана.
Данные нужно задавать через конструктор, а не через поток cin. Это не забота класса, с какого устройства вводить.
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
class Figure
{
protected:
    double a, b;
public:
    
    Figure(double x, double y)
    {
        a=x;
        b=y;
    }
    virtual void show(){}
};
class Rectangle:public Figure
{
public:
    Rectangle(double x, double y):Figure(x,y){}
    void show()
    {
        cout << "The square rectangle is " << a*b << "\n";
    }
};
class Trapeze:public Figure
{
private:
double delta; // на сколько смещена вторая сторона относительно первой
// высота равна b, Первое основание a, второе основание a-delta
public:
    Trapeze(double x, double y,double h):Figure(x,h){delta=x-y;}
    
    void show()
    {
        cout << "The square trapeze is " << 0.5*(a + a-delta)*b << "\n";
    }
};
int main()
{
   double x,y,e;
   cout << "Enter rectangle size a&b\n";
   cin>>x>>y;
   Figure* p;
   Rectangle or(x,y) ;
   p = &or ;
   p->show();
   cout << "Enter trapeze size a&b&h\n";
   cin>>x>>y>>h;
   Trapeze ot(x,y,h);
   p = &ot;
   p->show();
    
    return 0;
}


Вернуться к обсуждению:
Полиморфизм
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.07.2016, 08:31
Готовые ответы и решения:

Полиморфизм в с++
Вообщем я делал программу,изначально в ней было реализовано наследование.Затем...

Полиморфизм c++
Построить массив из указателей (базового типа) на объекты обоих классов....

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

Полиморфизм.
Доброго времени суток. Помогите решить следующую задачку: Создать класс...

Полиморфизм
Всем доброго времени суток, Разъясните пожалуйста задание: Создать класс...

5
Другие темы раздела
C++ Сортировка выбором через указатель http://www.cyberforum.ru/cpp-beginners/thread1775716.html
Здравствуйте дорогие формучани, дело в том что у меня возник вопрос, есть задача: Дан массив A размера N (≤6). Упорядочить его по возрастанию методом сортировки простым выбором: найти максимальный...
C++ Работа с одномерным целочисленным массивом в функции Здравствуйте. Я написал несколько функций по работе с массивом. В dimentInt() я объявляю массив и передаю его в addNewElIDA, которая добавляет новый элемент в массив на указанное место. Дело в том,... http://www.cyberforum.ru/cpp-beginners/thread1775676.html
Ошибка компиляции: идентификатор не определен C++
Приветствую всех. У меня такой вопрос , почему когда я пишу такой код, мне выдает ошибку на car* p_catalo = new car (идентификатор не определен.) Что я забыл написать? struct Car { string...
C++ Функции, вычислить сумму n первых членов арифметической прогрессии
1. Исходные данные должны вводиться в функции main(). 2. Первая функция должна возвращать заданную величину. 3. Во второй функции обеспечить контроль правильности исходных данных. Вторая функция,...
C++ Написать комментарии к коду http://www.cyberforum.ru/cpp-beginners/thread1775661.html
Помогите написать комментарии к этому заданию. И подробно прояснить. #include <cstdlib> #include <cstdio> #include <string.h> class OneArmedBandit { int Chips; int **Ring; ...
C++ Найти сумму элементов матрицы в тех столбцах, которые содержат хотя бы один отрицательный элемент Найти сумму элементов в тех столбцах, которые содержат хотя бы один отрицательный элемент. Вот, написал код, а выводит только матрицу, которую вводим вручную и все. В чем ошибки? #include... подробнее
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru