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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
RAVE
0 / 0 / 0
Регистрация: 06.10.2008
Сообщений: 12
#1

Полиморфизм - C++

12.03.2009, 20:59. Просмотров 1142. Ответов 5
Метки нет (Все метки)

Вот сделал прогу а ее надо было сделать полиморфизмом - кому несложно переделайте
Код
#include <iostream.h>
#include <conio.h>
#include <string.h>
#include <math.h>

class vectr {
public:
int a,b,c,p,s;
void input ();
void output ();
void square ();
};

class vectr2: public vectr {
public:
void square ();
};

void vectr::input ()
{
cout<<"input 3 side\n";
cin>>a>>b>>c;
cout<<endl;
}

void vectr::output ()
{
cout<<"Sides\n"<<a<<b<<c<<endl;
cout<<"Square\n"<<s<<endl;
}

void vectr::square ()
{
p=a+b+c;
p/=2;
s=pow(p*(p-a)*(p-b)*(p-c),1/2);
}

void vectr2::square ()
{
p=a+b+c;
p/=2;
s=2*pow(p*(p-a)*(p-b)*(p-c),1/2);
}

void menu ()
{
cout<<"####################################\n";
cout<<"1----------------Input points\n";
cout<<"2----------------Square of triangle\n";
cout<<"3----------------Output points\n";
cout<<"4----------------Input points 2\n";
cout<<"5----------------Square of quad\n";
cout<<"6----------------Output points 2\n";
cout<<"7----------------EXIT\n";
cout<<"####################################\n";
}

void main ()
{clrscr ();
int m,l;
vectr z;
vectr2 x;
for (;;){
clrscr ();
menu(); cin>>m;

if (m==1) {
z.input();
}

if (m==2){
z.square();
}

if (m==3) {
z.output(); getch();
}

if (m==4) {
x.input();
}

if (m==5){
x.square();
}

if (m==6) {
x.output(); getch();
}

if (m==7) break;
} //end for
return ;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.03.2009, 20:59     Полиморфизм
Посмотрите здесь:

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

Полиморфизм - C++
Всем доброго времени суток.Сразу к делу. Если описывать с помощью полиморфизма подклассы и потом динамично их создавать ,то можно вызывать...

полиморфизм - C++
Всем привет, изучаю С++ недавно, я новичек в этом языке программирования, читаю про ООП, понял все за исключением полиморфизма, что делает...

полиморфизм=( - C++
Ув.Знатаки Доброго времени суток!Вот есть проблемка с написание полиморфизма,вот написал класс,написал наследование,а вот как теперь сюда...

Полиморфизм - C++
не могу разобраться с полиморфизмом((( Вот как мне вычислить трапеции. У нее ведь три параметра, а не два как у прямоугольника???? ...

С++ и полиморфизм - C++
Здравствуйте. Ответьте пожалуйста на несколько вопросов: 1. Что такое абстрактная функция простыми словами? 2. Что такое...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Alexiski
Любитель давать советы
339 / 131 / 2
Регистрация: 12.01.2009
Сообщений: 511
12.03.2009, 21:10     Полиморфизм #2
Ну, переделывать тут особо нечего.
Для полиморфизма надо
1) Сделать базовый класс, типа "фигура", с методами input(), square(), output(),
2) Этот треугольник сделать наследником класса "фигура"
3) Добавить все-таки квадрат (а то в меню он есть, а так его нет), тоже наследника класса "фигура"
4) В меню будут пункты:
- выбрать тип фигуры
- ввести данные
- посчитать площадь
Вот как раз на двух последних пунктах и будет работать полиморфизм.
RAVE
0 / 0 / 0
Регистрация: 06.10.2008
Сообщений: 12
12.03.2009, 23:20  [ТС]     Полиморфизм #3
Ну принцип полиморфизма я вроде-как знаю, но я незнаю как организовать наследие в сишке.

Добавлено через 1 час 24 минуты 6 секунд
А какие методы должны быть у классах - наследниках и как их потом использовать?
ISergey
Maniac
Эксперт С++
1373 / 884 / 52
Регистрация: 02.01.2009
Сообщений: 2,653
Записей в блоге: 1
12.03.2009, 23:32     Полиморфизм #4
Вот для примера
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
#include <iostream>
using namespace std;
 
class CPolygon {
protected:
    int width, height;
public:
    void set_values (int a, int b) { width=a; height=b; }
    virtual int area() { return 0;}
};
 
class CRectangle: public CPolygon {
public:
    int area () { return (width * height); }
};
 
class CTriangle: public CPolygon {
public:
    int area () { return (width * height / 2); }
};
int main()
{
    CRectangle rect;
    CTriangle trgl;
    CPolygon poly;
 
    CPolygon * ppoly1 = &rect;
    CPolygon * ppoly2 = &trgl;
    CPolygon * ppoly3 = &poly;
 
    ppoly1->set_values (4,5);
    ppoly2->set_values (4,5);
    ppoly3->set_values (4,5);
    cout << ppoly1->area() << endl;
    cout << ppoly2->area() << endl;
    cout << ppoly3->area() << endl;
    return 0;
}
Более подробно можно посмотреть здесь
RAVE
0 / 0 / 0
Регистрация: 06.10.2008
Сообщений: 12
13.03.2009, 00:45  [ТС]     Полиморфизм #5
Спасиба за пример, но я не понял к это реализовать именно в моей проге з менюшкой и т.д. - переделайте плс мою прогу, а то я вот сижу пробую и ниче не выходит.

Добавлено через 57 минут 34 секунды
Вот насколько я понял - переделал - отпишите это полиморфизм вышел или нет
Код
#include <iostream.h>
#include <conio.h>
#include <string.h>
#include <math.h>

class figure {
public:
int a,b,c,p,s;
void input ();
void output ();
};

class triangle: public figure {
public:
void square ();
void output ();
};

class quad: public figure {
public:
void square ();
void output ();
};

void figure::input ()
{
cout<<"input 3 side\n";
cin>>a>>b>>c;
cout<<endl;
}

void figure::output ()
{
cout<<"Sides\n"<<a<<b<<c<<endl;
}

void triangle::square ()
{
p=a+b+c;
p/=2;
s=pow(p*(p-a)*(p-b)*(p-c),1/2);
}

void triangle::output ()
{
cout<<"Square of triangle\n"<<s<<endl;
}

void quad::square ()
{
p=a+b+c;
p/=2;
s=2*pow(p*(p-a)*(p-b)*(p-c),1/2);
}

void quad::output ()
{
cout<<"Square of quad\n"<<s<<endl;
}

void menu ()
{
cout<<"####################################\n";
cout<<"1----------------Input sides\n";
cout<<"2----------------Output sides\n";
cout<<"3----------------Square of triangle\n";
cout<<"4----------------Output Square of triangle\n";
cout<<"5----------------Square of quad\n";
cout<<"6----------------Output Square of quad\n";
cout<<"7----------------EXIT\n";
cout<<"####################################\n";
}

void main ()
{clrscr ();
int m,l;
figure z;
triangle x;
quad y;
for (;;){
clrscr ();
menu(); cin>>m;

if (m==1) {
z.input();
}

if (m==2){
z.output();getch();
}

if (m==3) {
x.square(); 
}

if (m==4) {
x.output();getch();
}

if (m==5){
y.square();
}

if (m==6) {
y.output(); getch();
}

if (m==7) break;
} //end for
return ;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.03.2009, 00:52     Полиморфизм
Еще ссылки по теме:

Полиморфизм. - C++
Доброго времени суток. Помогите решить следующую задачку: Создать класс периодическое издание (название, стоимость экземпляра и...

Полиморфизм - C++
Хай :senor: class MyPrint//производный класс { public: MyPrint() { cout &lt;&lt; &quot;Constructor MyPrint&quot; &lt;&lt; endl; } virtual...

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

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

Полиморфизм - C++
полиморфизм runtime vs compile polymorphism: как вы на проектах определяете, когда стоит пользоваться шаблоном, а когда...

Полиморфизм - C++
Я хотел реализовать множество, используя множественное наследование, но когда написал template &lt;class T&gt; class set { protected: ...


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

Или воспользуйтесь поиском по форуму:
ISergey
Maniac
Эксперт С++
1373 / 884 / 52
Регистрация: 02.01.2009
Сообщений: 2,653
Записей в блоге: 1
13.03.2009, 00:52     Полиморфизм #6
Примерно так
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
#include <iostream>
#include <cmath>
using namespace std;
 
class Figure {
protected:
    double m_Square;
    double m_a;
    double m_b;
    double m_c;
public:
    void Input()
    {
 
        cout<<"Input 3 side\n";
        cin >>m_a
            >>m_b
            >>m_c;
        cout<<endl;
    }
    void OutPut()
    {
        cout<<"Sides\n"
            <<m_a
            <<m_b
            <<m_c
            <<endl
            <<"Square\n"
            <<m_Square
            <<endl;
    }
    virtual void Square() { m_Square = 0.0; };//или virtual void Square() = 0;
};
 
class Triangle: public Figure {
public:
    void Square ()
    {
        double p = m_a + m_b + m_c;
        p /= 2;
        m_Square = pow(p*(p - m_a) * (p - m_b)*(p - m_c), 1/2 );
    }
};
 
class Quad: public Figure {
public:
    void Square ()
    {
        double p = m_a + m_b + m_c;
        p /= 2;
        m_Square = 2 * pow(p*(p - m_a) * (p - m_b)*(p - m_c), 1/2 );
    }
};
 
void menu ()
{
    cout<<"####################################\n"
        <<"1----------------Set Triangle\n"
        <<"2----------------Set Quad\n"
        <<"3----------------Input points\n"
        <<"4----------------Square\n"
        <<"5----------------Output points\n"
        <<"6----------------EXIT\n"
        <<"####################################\n";
}
 
int main ()
{
    int m;
    bool Run = true;
 
    Triangle z;
    Quad x;
    Figure *figure = &z;
 
    while(Run)
    {
        system("cls");
        menu(); 
        cin>>m;
        switch(m)
        {
            case 1: figure = &z; break;
            case 2: figure = &x; break;
            case 3: figure->Input(); break;
            case 4: figure->Square(); break;
            case 5: figure->OutPut(); system("pause"); break;
            case 6: Run = false; break;
        }
    }
    return 0;
}
Yandex
Объявления
13.03.2009, 00:52     Полиморфизм
Ответ Создать тему
Опции темы

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