Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
nfnicolas
3 / 3 / 0
Регистрация: 07.02.2016
Сообщений: 140
Завершенные тесты: 2
#1

Полиморфизм

04.07.2016, 21:55. Просмотров 464. Ответов 5
Метки нет (Все метки)

не могу разобраться с полиморфизмом(((
Вот как мне вычислить трапеции. У нее ведь три параметра, а не два как у прямоугольника????
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
class Figure
{
protected:
    double a, b;
public:
    
    void set(double&x, double&y)
    {
        cin >> a;
        cin >> b;
        
    }
    virtual void show(){}
};
class Rectangle:public Figure
{
public:
    void show()
    {
        cout << "The square rectangle is " << a*b << "\n";
    }
};
class Trapeze:public Figure
{
    
public:
    
    void show()
    {
        cout << "The square trapeze is " << 0.5*(a + b)*h << "\n";
    }
};
int main()
{
Figure*p;
        Rectangle or ;
        Trapeze ot;
        p = &or ;
        double x,y,e;
        cout << "Enter value a&b\n";
        p->set(x,y);
        p->show();
        p = &ot;
        cout << "Enter value for trapeze \n";
        p->set(x, y);           //тут должно быть 3 значения
        p->show();
    
    return 0;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.07.2016, 21:55
Ответы с готовыми решениями:

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

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

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

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

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

5
Renji
2102 / 1543 / 470
Регистрация: 05.06.2014
Сообщений: 4,473
04.07.2016, 22:01 #2
Цитата Сообщение от nfnicolas Посмотреть сообщение
Вот как мне вычислить трапеции. У нее ведь три параметра, а не два как у прямоугольника????
1) Выкинуть из set не используемые аргументы x и y.
2) Сделать set виртуальным.
0
nfnicolas
3 / 3 / 0
Регистрация: 07.02.2016
Сообщений: 140
Завершенные тесты: 2
04.07.2016, 22:06  [ТС] #3
а покажи пожалуйста на примере
C++
1
2
3
4
5
6
virtual void set()
    {
        cin >> a;
        cin >> b;
        
    }
я не так понял?
0
Renji
2102 / 1543 / 470
Регистрация: 05.06.2014
Сообщений: 4,473
04.07.2016, 22:11 #4
Цитата Сообщение от nfnicolas Посмотреть сообщение
я не так понял?
Примерно так, только не в Figure и без virtual.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Figure
{
public:
    virtual void set()=0;
    virtual void show()const=0;
};
class Rectangle:public Figure
{
public:
    void set(){cin>>a>>b;}
    void show()const{cout<<a<<" "<<b;}
private:
    double a,b;
};
1
zss
Модератор
Эксперт С++
7084 / 6619 / 4190
Регистрация: 18.12.2011
Сообщений: 17,446
Завершенные тесты: 1
05.07.2016, 08:31 #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
Ilot
Эксперт С++
1831 / 1189 / 342
Регистрация: 16.05.2013
Сообщений: 3,139
Записей в блоге: 5
Завершенные тесты: 1
05.07.2016, 09:16 #6
Треугольник это трапеция у которой одно основание равно нулю...
0
05.07.2016, 09:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.07.2016, 09:16

Полиморфизм
Хай :senor: class MyPrint//производный класс { public: MyPrint() {...

Полиморфизм
Сколько я не читал книг и уроков по С++-программированию, я так и не смог...

Полиморфизм
Здравствуйте :) Я пытался читать про полиморфизм. Читал-читал, но не очень...


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

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

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