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

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

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

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

28.02.2014, 21:23. Просмотров 187. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как правильно отнаследовать? (C++):

Как правильно вписать функцию в h-файл и правильно её отразить в основной функции? - C++
Создать внешнюю библиотеку, в которой написана функция вывода символьного массива обратном порядке. Подключить данную библиотеку к ...

Как правильно унаследовать TPoint2D от TPoint3D/ Правильно ли наследовать? ООП - C++
Два пользовательских класса: Точка в 2D пространстве и точка в 3D пространстве. class TPoint3D{ int X,Y,Z; public: ...

Как правильно вызвать метод в С++ и как использовать команду goto в default - C++
#include &lt;iostream&gt;; #include &lt;conio.h&gt;; using namespace std; void main() { setlocale(LC_ALL, &quot;Rus&quot;); calculate(); ...

Как правильно использовать классы? Как вывести значение класса на экран? - C++
Всех приветствую. Делаю задание по книге. По заданию нужно завести класс, в котором хранится информация о книгах: число выданных на руки...

как объявить правильно tr и как его использовать при вызове функции? - C++
main.cpp case 8: cout &lt;&lt; &quot;Firs trapec # is: &quot;; cin &gt;&gt; k; k = k - 1; cout &lt;&lt; &quot;Second trapec # is: &quot;; cin &gt;&gt; j;...

Как правильно записать алгоритм и как отобразить max и min? - C++
как правильно записать алгоритм и как отобразить max и min h = min {a,b,max{c,d}}

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
DrOffset
7089 / 4230 / 950
Регистрация: 30.01.2014
Сообщений: 7,006
28.02.2014, 23:31 #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Не вижу смысла тут вообще использовать наследование, если Graph - это объект, а Minway - это операция над объектом, то пусть так и будет. Мы ведь не будем наследовать человека от дороги только потому, что он по ней идет?
Передавайте только как 'const Graph & k', нам ведь не нужно лишнее копирование?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.02.2014, 23:31
Привет! Вот еще темы с ответами:

Как лучше это сделать?. а главное, как правильно? (Информационная система «Железнодорожный вокзал») - C++
Ситуация следующая... Есть задание курсовой работы: 11. Информационная система «Железнодорожный вокзал». Информация: рейсы — номер...

Как правильно записывать условные операторы и как прервать проверку при достижении результата? - C++
доброго времени суток форумчане, подскажите пожалуйста как остановить условие после правильно выполненного условия.#include &quot;stdafx.h&quot; ...

C++ как правильно передавать функцию как параметр? - C++
Всем првет! Я кодю на OpenGL и сделал клас Game у меня в етом класе есть функция DrawGLScene(); как мне передать ее в ...

Прошу сказать, правильно ли я решил, и , если не правильно, то указать ошибки - C++
Есть задачка \sum_{i=0}^{8}\sum_{j=0}^{10}\sum_{k=0}^{3}\left(\frac{i+3k-4j}{2+3i+4j} \right) и есть мой код (сразу говорю, я...


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

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

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