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

Ромбовидное наследование. Конструктор внука. - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Подскажите пожалуйста как привязать ListBox и WebBrowser в С++ http://www.cyberforum.ru/cpp-beginners/thread546944.html
Подскажите пожалуйста как привязать ListBox и WebBrowser в С++, т.е. должны отображаться HTML страницы на WebBrowser при нажатии на пункты из ListBox.
C++ Система линейных уравнений методом Ньютона Система линейных уравнений методом Ньютона x4-3x-20=0 (x>0) http://www.cyberforum.ru/cpp-beginners/thread546933.html
C++ Коментарии к Коду
заранее спасибо #include<conio.h> #include<iostream.h> #include<stdio.h> #include<stdlib.h> main() {int A,i,j,k=0,n,max,max1,S=0; randomize(); do {cout<<"n=";cin>>n;} while(n>33||n<1);
C++ Замена 1 символа на несколько
Доброго времени суток. Помогите доделать задачу. Задача: Преобразовать строку, содержащую выражение на Си с операциями (=,==,!=,a+=,a-=, где a – обозначает идентификатор), в строку, содержащую эти же операции с синтаксисом языка Паскаль (:=,=,#,a=a+,a=a-, где a – обозначает идентификатор). Представленный код работает корректно для =,==,!= но с а+=,а-= действует только на 1 операцию в строке...
C++ Вычислить сумму и число элементов, значения которых находятся между половиной значения максимума и нулём http://www.cyberforum.ru/cpp-beginners/thread546894.html
1. Вычислить сумму и кол-во элементов значения которые нахалдяться между половиной значения максимума и нулём 2. Создать одномерный массив, из 10-тков значений элементов каждой области (пришлите код , контрольная идёт)
C++ Стеки, очереди Здравствуйте. Прошу помочь с решением следующей задачи: Используя очередь, решить задачу. TYPE имя = (Анна,..., Яков); дети = АRRAY OF BOOLEAN; потомки = FILE OF имя; Считая заданным имя И и массив Д типа дети (Д = TRUE, если человек по имени Y является ребенком человека по имени X), записать в файл П типа потомки имена всех потомков человека с именем И в следующем порядке: сначала - имена... подробнее

Показать сообщение отдельно
IcyWind
8 / 8 / 2
Регистрация: 19.09.2011
Сообщений: 268
13.04.2012, 16:41     Ромбовидное наследование. Конструктор внука.
если хотите, можете почитать код - он довольно объёмный...но однотипный
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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
 
class chipset
{
    short *USB_number;//[0] - usb2 / [1] - usb3
    
public:
    chipset(short usb2, short usb3)
    {
        cout<<"Я МУЖИК"<<endl;
        
        USB_number = new short[2];
        USB_number[0] = usb2;
        USB_number[1] = usb3;
    }
    
    chipset(chipset &chip)
    {
        
        
        USB_number = new short[2];
        USB_number[0] = chip.USB_number[0];
        USB_number[1] = chip.USB_number[1];
    }
 
    chipset()
    {
        
        
        USB_number = new short[2];
        USB_number[0] = 4;
        USB_number[1] = 0;
    }
 
    void operator = (chipset &chip)
    {
        //cout<<"Я МУЖИК"<<endl;
        
        USB_number[0] = chip.USB_number[0];
        USB_number[1] = chip.USB_number[1];
    }
 
    void print()
    {
        cout<<endl<<"Вывод конфигурации"<<endl;
        cout<<"\tUSB2 \t-\t"<<USB_number[0]<<" шт."<<endl;
        cout<<"\tUSB3 \t-\t"<<USB_number[1]<<" шт."<<endl;
    }
 
    ~chipset()
    {
        delete [] USB_number;
    }
};
 
class chipsetP : virtual public chipset
{
    short* Multi;
    bool SLI_CF_enable;
 
protected:
 
    void _print()
    {
        cout<<"\tНастройки ЦП:"<<endl;
        cout<<"\t\tядро1 \t-\tx"<<Multi[0]<<endl;
        cout<<"\t\tядро2 \t-\tx"<<Multi[1]<<endl;
        if (SLI_CF_enable)
            cout<<"\tSLI/CrossFire \t-\t включён"<<endl;
        else
            cout<<"\tSLI/CrossFire \t-\t выключен"<<endl;
    }
 
    void _operatorEQ(chipsetP &chP)
    {
        Multi[0] = chP.Multi[0];
        Multi[1] = chP.Multi[1];
        SLI_CF_enable = chP.SLI_CF_enable;
    }
 
public:
    chipsetP(short usb2, short usb3, short core1, short core2, bool SC):chipset(usb2, usb3)
    {
        Multi = new short[2];
        Multi[0] = core1;
        Multi[1] = core2;
        SLI_CF_enable = SC;
    }
 
    chipsetP(chipsetP & cp):chipset(cp)
    {
        Multi = new short[2];
        Multi[0] = cp.Multi[0];
        Multi[1] = cp.Multi[1];
        SLI_CF_enable = cp.SLI_CF_enable;
    }
 
    chipsetP()
    {
        Multi = new short[2];
        Multi[0] = 30;
        Multi[1] = 30;
    }
 
    void print()
    {
        chipset::print();
        _print();
    }
 
    void operator = (chipsetP &chP)
    {
        chipset::operator=(chP);
        _operatorEQ(chP);
    }
    
    ~chipsetP()
    {
        delete [] Multi;
    }
};
 
class chipsetH : virtual public chipset
{
    bool Quick_Sync;
    short *HDGraph;
 
protected:
    void _print()
    {
        cout<<"\tВстроенное граф ядро:"<<endl;
        cout<<"\t\tчастота \t-\t"<<HDGraph[0]<<" Мгц"<<endl;
        cout<<"\t\tкол-во потоков \t-\t"<<HDGraph[1]<<" шт."<<endl;
        if (Quick_Sync)
            cout<<"\t\tQuick_Sync \t-\t включён"<<endl;
        else
            cout<<"\t\tQuick_Sync \t-\t выключен"<<endl;
    }
    void _operatorEQ(chipsetH &chH)
    {
        HDGraph[0] = chH.HDGraph[0];
        HDGraph[1] = chH.HDGraph[1];
        Quick_Sync = chH.Quick_Sync;
    }
 
public:
    chipsetH()
    {
        HDGraph = new short[2];
        HDGraph[0] = 1500;
        HDGraph[1] = 12;
        Quick_Sync = true;
    }
 
    chipsetH(chipsetH &cH) : chipset(cH)
    {
        HDGraph = new short[2];
        HDGraph[0] = cH.HDGraph[0];
        HDGraph[1] = cH.HDGraph[1];
        Quick_Sync = cH.Quick_Sync;
    }
 
    chipsetH(short USB2, short USB3, short Hhz, short streams, bool Quick_Sync_) : chipset(USB2, USB3)
    {
        HDGraph = new short[2];
        HDGraph[0] = Hhz;
        HDGraph[1] = streams;
        Quick_Sync = Quick_Sync_;
    }
 
    void print()
    {
        chipset::print();
        _print();
    }
 
    void operator = (chipsetH& chH)
    {
        _operatorEQ(chH);
        chipset::operator=(chH);
    }
    
    ~chipsetH()
    {
        delete [] HDGraph;
    }
 
 
};
 
class chipsetZ : public chipsetH, public chipsetP
{
    bool *video_mode;
    bool Smart_Response;
 
protected:
    void _print()
    {
        cout<<"\tПодключённые мониторы:"<<endl;
        if(video_mode[0] == true)
            cout<<"\t\tмонитор обнаружен в дескретной карте"<<endl;
        else
            cout<<"\t\tслот дискретной карты пуст"<<endl;
 
        if(video_mode[1] == true)
            cout<<"\t\tмонитор обнаружен во встроенной карте"<<endl;
        else
            cout<<"\t\tслот встроенной карты пуст"<<endl;
 
        if (Smart_Response)
            cout<<"\tХэширование HDD включено"<<endl;
        else
            cout<<"\tХэширование HDD выключено"<<endl;
    }
 
public:
    chipsetZ(chipsetZ &chZ)
    {
        video_mode = new bool[2];
        for(int i=0; i<2; ++i)
            video_mode[i] = chZ.video_mode[i];
    }
 
    chipsetZ(short USB2, short USB3, short core1, short core2, bool CF, short Hhz, short streams, bool Quick_Sync_, bool card_e, bool int_e):chipset(USB2, USB3)
    {
        video_mode = new bool[2];
        video_mode[0] = card_e;
        video_mode[1] = int_e;
    }
 
    void print()
    {
        chipset::print();
        chipsetP::_print();
        chipsetH::_print();
        _print();
    }
    
    ~chipsetZ()
    {
        delete [] video_mode;
    }
};
проблема в конструкторах внука...(chipsetZ)
теперь более конктретно:
C++
1
chipsetZ(short USB2, short USB3, short core1, short core2, bool CF, short Hhz, short streams, bool Quick_Sync_, bool card_e, bool int_e):chipset(USB2, USB3)
у меня проблема в понимании самого процесса вызовов конструкторов:
я думаю так:
при такой записи сначало вызовется конструктор по умолчанию предка chipsetH(который в свою очередь вызовет конструктор по умолчанию для "дедушки" chipset), потом конструктор по умолчанию для chipsetP (который тоже вызовет дедушку по умолчанию), потом вызовется конструктор дедушки с параметрами ЮЗБ2 и ЮЗБ3.
итого: получили вызов конструктора дедушки 3 раза?
выход виже в следующем: добавить в протектед секции папы и мамы (H и P) спец конструкторы, которые соответствуют уникальным полям. Но тогда возникают ещё вопросы...ведь я же не смогу вызвать конструкторы папы и мамы (в протектет секциях папы и мамы), не вызвав конструктор деда? Он же по умолчанию вызовется...
надеюсь, мои слова поймёте...пытался как можно более подробно расписать
спасибо
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 01:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru