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

Как правильно отнаследовать? - C++

Восстановить пароль Регистрация
 
eXplo1dl
0 / 0 / 0
Регистрация: 16.10.2012
Сообщений: 58
28.02.2014, 21:23     Как правильно отнаследовать? #1
Здарова! Такой вопрос! как можно правильно записать следующее:есть два класса 1-й класс -граф, второй класс-минимальный путь из одной точки до другой.Хотел сделать следующее, есть некоторая перменная "k" типа Graph(1-й класс) там вводится граф. Затем эта переменная передается в другой класс Minway(поиск минимального пути в графе), чтобы использовать саму таблицу смежности.Как можно это правильно сделать? не подскажите как поправить это дело.Заранее спасибо за помощь!
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#include <iostream>
 
using namespace std;
#define SIZE 3
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
class Graph{
    
    public:
        void add(int,int,int);
        void out();
        void normalize();
        int table [SIZE][SIZE];
};
 
void Graph::normalize()
{
    int i,j;
    
    for(i=0;i<5;i++)
    {
        for(j=0;j<5;j++)
        {
            table[i][j]=0;
         }
    }
}
 
void Graph::add(int i,int j,int m)
{
    table[i][j]=m;
}
 
void Graph::out ()
{
    int i,j;
    
    for(i=0;i<SIZE;i++)
    {
        for(j=0;j<SIZE;j++)
        {
            cout<<table[i][j];
        }
        cout<<"\n";
    }
}
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
class Minway:public Graph
{
    public:
        void add(Graph,int);
        void poschain(Graph,int,int,int,int[SIZE][SIZE]);
        void outchain(int[SIZE][SIZE],int,int);
        void out();
    private:
        int quantity=0;
        int start=0,finish=0;
        int chain[SIZE] {0};
};
 
void Minway::out()
{
    for(int i=0;i<quantity;i++)
    {
        cout<<endl<<chain[i]<<">>";
    }
}
 
void Minway::outchain(int helptable[SIZE][SIZE],int start,int finish)
{
    int i=finish,j=0;
    int dopchain[SIZE];
    
    while(i!=start)
    {
        dopchain[j]=i;
        i=helptable[i][i];
        j++;
    }
    for (int k=0;k<j;k++)
    {
        chain[k]=dopchain[j-1-k];
        cout<<chain[k]<<">>";
    }
}
void Minway::poschain(Graph k,int start,int finish,int quantity,int helptable[SIZE][SIZE])
{
    int i=start;
    
    for(int j=0;j<quantity;j++)
    {
        if((j!=start)&&(table[j][j]>table[i][i]+table[i][j]))
        {
            helptable[j][j]=i;
            table[j][j]=table[i][i]+table[i][j];
            poschain(k,j,finish,quantity,helptable);
        }
    }
}
 
void  Minway::add(Graph k,int l)
{
    int MaxInt= std::numeric_limits<int>::max();
    quantity=l;
    cout<<"Введите начало пути";
    cin>>start;
    cout<<"Введите конец пути";
    cin>>finish;
    int helptable[SIZE][SIZE];
    
    for (int i=0;i<quantity;i++)
    {
     if(i!=start)
     {
         table[i][i]=MaxInt;
     }
    }
    poschain(k,start,finish,quantity,helptable);
    outchain(helptable,start,finish);
}
 
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
int main()
{
    Graph k;
    Minway way;
    k.normalize();
    int i,j,apex;
    
    for (i=0;i<3;i++)
    {
         for (j=0;j<3;j++)
         {
             cin>>apex;
             k.add(i,j,apex);
         }
    }
 
    k.out();
    way.add(k,i);
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.02.2014, 21:23     Как правильно отнаследовать?
Посмотрите здесь:

Как правильно вызвать метод в С++ и как использовать команду goto в default C++
C++ Прошу сказать, правильно ли я решил, и , если не правильно, то указать ошибки
C++ C++ как правильно передавать функцию как параметр?
C++ Как лучше это сделать?. а главное, как правильно? (Информационная система «Железнодорожный вокзал»)
C++ Как правильно использовать классы? Как вывести значение класса на экран?
Как правильно записывать условные операторы и как прервать проверку при достижении результата C++
Программа правильно сохраняет, но не правильно считывает матрицу из файла C++
C++ Как правильно вписать функцию в h-файл и правильно её отразить в основной функции?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DrOffset
6426 / 3800 / 880
Регистрация: 30.01.2014
Сообщений: 6,594
28.02.2014, 23:31     Как правильно отнаследовать? #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Не вижу смысла тут вообще использовать наследование, если Graph - это объект, а Minway - это операция над объектом, то пусть так и будет. Мы ведь не будем наследовать человека от дороги только потому, что он по ней идет?
Передавайте только как 'const Graph & k', нам ведь не нужно лишнее копирование?
Yandex
Объявления
28.02.2014, 23:31     Как правильно отнаследовать?
Ответ Создать тему
Опции темы

Текущее время: 12:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru