Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/21: Рейтинг темы: голосов - 21, средняя оценка - 4.57
76 / 76 / 11
Регистрация: 02.12.2011
Сообщений: 296
1

Перегрузка метода в классе-наследнике

01.12.2013, 20:47. Показов 4153. Ответов 12
Метки нет (Все метки)

...доброго времени суток, уважаемые форумчане!...
...Возник вопрос: не могу сообразить как перегрузить метод Testing в этой библиотеке:

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
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace Electronic
{
 // Создаем базовый класс компонентов
 public class Component
  {
  // Физические параметры для всех компонентов
     protected int Height;   // Высота
     protected int Width;    // Ширина
     protected int Thickn;   // Толшина
     protected int Color;    // Цвет
  // --------------------------------------
  /* Эта переменная хранит false, если элемент не прошел тестирование
   * и true - если прошел */
     public bool Ok = false;
  // -------------------------------------
  /* Эта переменная хранит количество однотипных компонентов  с заданными
   * параметрами (англ. Amount of Suitable - количество годного) */
     public int AmSuit;
  // Уникальный номер компонента с заданными параметрами
     public int id;
  }
// ---------------------------------------------------
  public int Testing (int HeightMAX, int WidthMAX, int ThicknMAX, int ResistMAX, int PowerMAX /*, double z*/)
     {
        int result = 0;
       if ((Height < HeightMAX) && (Width < WidthMAX) && (Thickn < ThicknMAX) && (Resist < ResistMAX) && (Power < PowerMAX))
        {
           result = 1;
           Ok = true;
        }
    return result;
     }
 
// ---------------------------------------------------
// Дочерний класс описывает объекты типа резистор
 public class Resistor : Component
  {
   // Электрические параметры
      private int Resist;   // Сопротивление 
      private double Power; // Максимальная рассеиваемая мощность
  // --------------------------------------------------------------------
  // Конструктор задающий все параметры конкретного экземпляра резистора
    public Resistor(int Height1, int Width1, int Thickn1, 
                    int Color1,  int Resist1, int Power1)
     {
        Height = Height1;
        Width = Width1;
        Thickn = Thickn1;
        Color = Color1;
        Resist = Resist1;
        Power = Power1;
     }
  // -------------------------------------------------------------------
  // Тестирует резистор на работоспособность
    private int Testing(int HeightMAX, int WidthMAX, int ThicknMAX, int ResistMAX, int PowerMAX /*, double z*/)
     {
        int result = 0;
       if ((Height < HeightMAX) && (Width < WidthMAX) && (Thickn < ThicknMAX) && (Resist < ResistMAX) && (Power < PowerMAX))
        {
           result = 1;
           Ok = true;
        }
    return result;
     }
 }
// ---------------------------------------------------------
// Дочерний класс описывает объекты типа конденсатор
  public class Capacitor : Component
   {
   // Электрические параметры
      private int Сapacit; // Емкость
   // ----------------------------------------------------
   // Конструктор задающий все параметры конкретного экземпляра конденсатора
     public Capacitor(int Height1, int Width1, int Thickn1, 
                      int Color1, int Сapacit1)
      {
         Height = Height1;
         Width = Width1;
         Thickn = Thickn1;
         Color = Color1;
         Сapacit = Сapacit1;
      }
// ------------------------------------------------------- 
// Тестирует конденсатор на работоспособность
  private int Testing(int HeightMAX, int WidthMAX, int ThicknMAX, int СapacitMAX /*, double z*/)
   {
      int result = 0;
     if ((Height < HeightMAX) && (Width < WidthMAX) && (Thickn < ThicknMAX) && (Сapacit < СapacitMAX))
      {
         result = 1;
         Ok = true;
     }
    return result;
     }
 }
// ----------------------------------------------------------
// Дочерний класс описывает объекты типа Транзистор
  public class Transistor : Component
   {
   // Электрические параметры
      private double h21E;  // Коэффициент усиления
   // -----------------------------------------------------
   // Конструктор задающий все параметры конкретного транзистора
     public Transistor(int Height1, int Width1, int Thickn1, 
                       int Color1, double h21E1)  
      {
         Height = Height1;
         Width = Width1;
         Thickn = Thickn1;
         Color = Color1;
         h21E = h21E1;
      }
 // ------------------------------------------------------------
 // Тестирует транзистор на работоспособность
     private int Testing(int HeightMAX, int WidthMAX, int ThicknMAX, 
                         double h21Emax /*, double z*/)
      {
         int result = 0;
        if ((Height < HeightMAX) && (Width < WidthMAX) && (Thickn < ThicknMAX) && (h21E < h21Emax))
         {
            result = 1;
            Ok = true;
         }
      return result;
      }
 }
// --------------------------------------------------------------
// Дочерний класс описывает объекты типа диод
 public class Diode : Component
  {
  // Электрические параметры
    private double HaspVolt;    // Пробивное напряжение
  // ----------------------------------------------------------
  // Конструктор задающий все параметры конкретного диода
    public Diode(int Height1, int Width1, int Thickn1, 
                 int Color1, double HaspVolt1, double z)
     {
        Height = Height1;
        Width = Width1;
        Thickn = Thickn1;
        Color = Color1;
        HaspVolt = HaspVolt1;
      }
  // ---------------------------------------------------------
  // Тестирует диод на работоспособность
    private int Testing(int HeightMAX, int WidthMAX, int ThicknMAX, double HaspVoltMAX /* double z*/)
     {
        int result = 0;
       if ((Height < HeightMAX) && (Width < WidthMAX) && (Thickn < ThicknMAX) && (HaspVolt < HaspVoltMAX))
        {
           result = 1;
           Ok = true;
        }
       return result;
     }
 }
// -------------------------------------------------------
// -------------------------------------------------------
// ---------------- Создаем класс люди -------------------
 public class People
  {
     protected string Name;     
     protected string Familie; 
  }
// ---------------------------------------------------------
// --------------------------------------------------------- 
// Класс описывает объект типа "люди" - клиент (покупатель)
  public class Client : People   
   {
   // ---------- Характеристики покупки -------------
      private int[] idComponent = new int[100];  // id купленных компонентов
      private string[] Type = new string[100];   // Тип купленных компонентов
   /* Количество купленных компонентов - QuanBoug
    * (от англ. - Quantity of the bought) */
      private int QuanBoug = 0;                       
   // --------------------------------------------------
   // Конструктор заполняет поля: имя и фамилия клиента
    public Client(string Cl_Name, string Cl_Familie)  
     {
        Name = Cl_Name;        // Имя клиента
        Familie = Cl_Familie;  // Фамилия клиента
     }
 // -------------------------------------------------------
 // -------- Описание покупок (англ. - Purchase) ----------
    public bool Purchase(Resistor R1, Capacitor C1, Transistor T1, Diode D1, int TypeNumber)
     {
    // ------------- Покупка резисторов ---------------
       if (TypeNumber == 1)
        {
          if (R1.Ok == true)
           {
              idComponent[QuanBoug] = R1.id;
              Type[QuanBoug] = "Resistor";
              QuanBoug = QuanBoug + 1;
              R1.AmSuit--;
             return true;
           }
        }
    // -------------- Покупка конденсаторов -----------
       if (TypeNumber == 2)
        {
          if (C1.Ok == true)
           {
              idComponent[QuanBoug] = C1.id;
              Type[QuanBoug] = "Capacitor";
              QuanBoug = QuanBoug + 1;
              C1.AmSuit--;
             return true;
           }
        }
    // ------------ Покупка транзисторов -------------
       if (TypeNumber == 3)
        {
          if (T1.Ok == true)
           {
              idComponent[QuanBoug] = T1.id;
              Type[QuanBoug] = "Transistor";
              QuanBoug = QuanBoug + 1;
              T1.AmSuit--;
             return true;
           }
        }
    // ---------------- Покупка диодов --------------- 
      if (TypeNumber == 4)
       {
         if (D1.Ok == true)
          {
             idComponent[QuanBoug] = D1.id;
             Type[QuanBoug] = "Diod";
             QuanBoug = QuanBoug + 1;
             D1.AmSuit--;
            return true;
          }
        }
  // --------------------------------------------------
      return false;   // Если покупка не удалась
    }
 }
// -----------------------------------------------------
// -----------------------------------------------------
  /* Дочерний класс, который описывает рабочего, контролирующего
   * качество выпускаемых электронных компонентов - ContQual
   * (от англ. - The controller of quality) */
 public class ContQual : People 
  {
  // Конструктор заполняет поля: имя и фамилия рабочего-контролера 
   public ContQual (string CQ_Name, string CQ_Familie)
    {
       Name = CQ_Name;       // Имя тестера
       Familie = CQ_Familie; // Фамилия тестера
    }
 // -----------------------------------------------------------
 /* Получаем количество - QuanMade (англ. - Quantity of the made)
  * и id выпускаемых (Release) компонентов */
   public bool Release(Resistor R1, Capacitor C1, Transistor T1, Diode D1, int TypeNumber, int QuanMade, int id)  
    {
    // Выпуск резисторов
      if (TypeNumber == 1)
       {
          R1.AmSuit = QuanMade;
          R1.id = id;
         return true;
       }
    // Выпуск конденсаторов
      if (TypeNumber == 2)
       {
          C1.AmSuit = QuanMade;
          C1.id = id;
         return true;
       }
    // Выпуск транзисторов
      if (TypeNumber == 3)
       {
          T1.AmSuit = QuanMade;
          T1.id = id;
         return true;
       }
    // Выпуск диодов
      if (TypeNumber == 4)
       {
          D1.AmSuit = QuanMade;
          D1.id = id;
         return true;
       }
     return false;   // Компонент не прошел тестирование
   }
 
 }
}
Заранее благодарен за подсказку!
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.12.2013, 20:47
Ответы с готовыми решениями:

Перегрузка метода в классе
Вопрос, конечно, очень тривиальный, но все же попрошу помощи у более опытных людей. В классе...

Перегрузка операций в классе наследнике
всем привет товарищи программисты, есть вопрос. делал как то перегрузку операций, но делал ее...

Вызов невиртуального метода в классе-наследнике
Добрый день! Имеется следующий код: #include &lt;iostream&gt; using namespace std; namespace...

Объявить в классе-наследнике указатель, указывающий туда же, куда указывает указатель в классе-родителе
Здравствуйте. Имеется базовый класс MainWindow: #ifndef MAINWINDOW_H #define MAINWINDOW_H...

12
115 / 115 / 70
Регистрация: 10.11.2013
Сообщений: 445
01.12.2013, 20:51 2
Чтобы перегружать методы в классах-наследниках, в классе-родителе этот метод должен быть помечен ключевым словом virtual или abstract, в классе-наследнику необходимо помечать пергружаемый метод ключевым словом override.
2
76 / 76 / 11
Регистрация: 02.12.2011
Сообщений: 296
01.12.2013, 21:19  [ТС] 3
....да, про эти модификаторы как-то забыл...
0
438 / 362 / 100
Регистрация: 29.06.2010
Сообщений: 981
Записей в блоге: 1
01.12.2013, 21:58 4
Цитата Сообщение от Anderok Посмотреть сообщение
Чтобы перегружать методы в классах-наследниках, в классе-родителе этот метод должен быть помечен ключевым словом virtual или abstract, в классе-наследнику необходимо помечать пергружаемый метод ключевым словом override.
Не обязательно, если мы будем работать только с ссылкой наследника, тогда можно переопределить метод через new.
0
115 / 115 / 70
Регистрация: 10.11.2013
Сообщений: 445
01.12.2013, 22:07 5
Цитата Сообщение от Grishaco Посмотреть сообщение
Не обязательно, если мы будем работать только с ссылкой наследника, тогда можно переопределить метод через new.
Можно пример? Стало интересно.
0
60 / 59 / 15
Регистрация: 04.05.2010
Сообщений: 161
01.12.2013, 22:14 6
Это называется явное сокрытие
http://msdn.microsoft.com/ru-r... f1dw2.aspx
2
438 / 362 / 100
Регистрация: 29.06.2010
Сообщений: 981
Записей в блоге: 1
01.12.2013, 22:15 7
Цитата Сообщение от Anderok Посмотреть сообщение
Можно пример? Стало интересно.
Ловите, у стандартного грида я переопределил свойство DataSource, которое теперь не object, а мой тип.

C#
1
2
3
4
5
6
7
8
9
10
11
12
public class MyDataGridView : DataGridView
    {
        public new MyClass DataSource
        {
            get { return base.DataSource as MyClass; }
            set { base.DataSource = value; }
        }
    }
 
    public class MyClass
    {
    }
Только не забывайте если вы объявите грид вот так, работать не будет, т.е. если ссылка будет указывать на родительский объект то все что переопределено через new не работает.

C#
1
DataGridView dataGridView = new MyDataGridView();
2
76 / 76 / 11
Регистрация: 02.12.2011
Сообщений: 296
01.12.2013, 22:28  [ТС] 8
...вот, что сделал (только пока для дочернего класса Resistor [строки 28...36 - метод поднял "вверх"; 61...73 - было; 75...82 - стало]), ошибок компилятор не находит, но вот сохранится ли прежний функционал?...

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
namespace Electronic
{
 // Создаем базовый класс компонентов
 public class Component
  {
  // Физические параметры для всех компонентов
     protected int Height;   // Высота
     protected int Width;    // Ширина
     protected int Thickn;   // Толшина
     protected int Color;    // Цвет
  // --------------------------------------
  /* Эта переменная хранит false, если элемент не прошел тестирование
   * и true - если прошел */
     public bool Ok = false;
  // -------------------------------------
  /* Эта переменная хранит количество однотипных компонентов  с заданными
   * параметрами (англ. Amount of Suitable - количество годного) */
     public int AmSuit;
  // Уникальный номер компонента с заданными параметрами
     public int id;
   /* Эта переменная хранит результаты тестирования компонента и
    * может быть использована для подсчета общего их количества:
    * 0 - если тест не пройден;
    * 1 - если тест пройден */
     protected int result = 0;
 // ---------------------------------------------------------
    public int Testing(int HeightMAX, int WidthMAX, int ThicknMAX)
     {
      
       if ((Height < HeightMAX) && (Width < WidthMAX) && (Thickn < ThicknMAX))
         {
             result = 1;
             Ok = true;
         }
      return result;
    } 
  }
// ---------------------------------------------------
 
// ---------------------------------------------------
// Дочерний класс описывает объекты типа резистор
 public class Resistor : Component
  {
   // Электрические параметры
      private int Resist;   // Сопротивление 
      private double Power; // Максимальная рассеиваемая мощность
  // --------------------------------------------------------------------
  // Конструктор задающий все параметры конкретного экземпляра резистора
    public Resistor(int Height1, int Width1, int Thickn1, 
                    int Color1,  int Resist1, int Power1)
     {
        Height = Height1;
        Width = Width1;
        Thickn = Thickn1;
        Color = Color1;
        Resist = Resist1;
        Power = Power1;
     }
  // -------------------------------------------------------------------
  // Тестирует резистор на работоспособность
  /* ----- Было так ------
   *  private int Testing(int HeightMAX, int WidthMAX, int ThicknMAX, int ResistMAX, int PowerMAX /*, double z*/)
  /*     {
   *       int result = 0; - переменная перенесена "вверх"
          if ((Height < HeightMAX) && (Width < WidthMAX) && (Thickn < ThicknMAX) && (Resist < ResistMAX) && (Power < PowerMAX))
           {
              result = 1;
              Ok = true;
           }
          return result;
         }
   * 
       -------------- Теперь стало ----------- */
    private int Testing(int HeightMAX, int WidthMAX, int ThicknMAX, int ResistMAX, int PowerMAX /*, double z*/)
     {
       if (/*(Height < HeightMAX) && (Width < WidthMAX) && (Thickn < ThicknMAX) && */(Resist < ResistMAX) && (Power < PowerMAX))
        {
           result = 1;
           Ok = true;
        }
    return result;
     } 
   
 }
0
438 / 362 / 100
Регистрация: 29.06.2010
Сообщений: 981
Записей в блоге: 1
01.12.2013, 22:39 9
Цитата Сообщение от Simulkin Stas Посмотреть сообщение
но вот сохранится ли прежний функционал?..
Вообще такими вещами не нужно злоупотреблять, лучше стараться делать перегрузки, вот пример который показывает, что даже смена ссылки ведет к некорректному результату.

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
    public class MyClass
    {
        public string GetString()
        {
            return "Это строка из метода GetString класса MyClass";
        }
    }
 
    public class Test : MyClass
    {
        public new string GetString()
        {
            return "Это строка из метода GetString класса Test";
        }
    }
 
    internal class Program
    {
        [STAThread]
        private static void Main(string[] args)
        {
            //Пока в левой части дочерний класс все будет ок
            Test t = new Test();
            Console.WriteLine(t.GetString());
            //Меняем левую часть на родителя
            MyClass t1 = new Test();
            Console.WriteLine(t1.GetString());
 
            Test t2 = new Test();
            Console.WriteLine(t2.GetString());
            //Меняем ссылку
            MyClass t3 = t2;
            Console.WriteLine(t3.GetString());
        }
    }
1
76 / 76 / 11
Регистрация: 02.12.2011
Сообщений: 296
01.12.2013, 22:52  [ТС] 10
...да я согласен, но стоит задача т. н. рефакторинга - т. е. "улучшения читаемости" кода...

Добавлено через 8 минут
...т. е. мой последний вопрос сводится к тому, надо ли в строку 77 дописывать
C#
1
(Height < HeightMAX) && (Width < WidthMAX) && (Thickn < ThicknMAX)
или нет?
0
438 / 362 / 100
Регистрация: 29.06.2010
Сообщений: 981
Записей в блоге: 1
01.12.2013, 22:58 11
Цитата Сообщение от Simulkin Stas Посмотреть сообщение
...т. е. мой последний вопрос сводится к тому, надо ли в строку 77 дописывать
Т.к. вы скрыли метод, но вам необходимо знать что он вернет, то используйте его вызов

C#
1
2
3
4
5
6
if(base.Testing(HeightMAX, WidthMAX, ThicknMAX) && (Resist < ResistMAX) && (Power < PowerMAX))
{
           result = 1;
           Ok = true;
}
return result;
1
76 / 76 / 11
Регистрация: 02.12.2011
Сообщений: 296
01.12.2013, 23:00  [ТС] 12
...спасибо большое - это именно то, что меня интересовало...
0
902 / 663 / 132
Регистрация: 01.03.2010
Сообщений: 1,243
02.12.2013, 03:04 13
Цитата Сообщение от Simulkin Stas Посмотреть сообщение
стоит задача т. н. рефакторинга
Тогда ваш код можно уменьшить минимум в два раза

Например, только это можно сильно сократить
Кликните здесь для просмотра всего текста

-------- Описание покупок (англ. - Purchase) ----------
public bool Purchase(Resistor R1, Capacitor C1, Transistor T1, Diode D1, int TypeNumber)
{
// ------------- Покупка резисторов ---------------
if (TypeNumber == 1)
{
if (R1.Ok == true)
{
idComponent[QuanBoug] = R1.id;
Type[QuanBoug] = "Resistor";
QuanBoug = QuanBoug + 1;
R1.AmSuit--;
return true;
}
}
// -------------- Покупка конденсаторов -----------
if (TypeNumber == 2)
{
if (C1.Ok == true)
{
idComponent[QuanBoug] = C1.id;
Type[QuanBoug] = "Capacitor";
QuanBoug = QuanBoug + 1;
C1.AmSuit--;
return true;
}
}
// ------------ Покупка транзисторов -------------
if (TypeNumber == 3)
{
if (T1.Ok == true)
{
idComponent[QuanBoug] = T1.id;
Type[QuanBoug] = "Transistor";
QuanBoug = QuanBoug + 1;
T1.AmSuit--;
return true;
}
}
// ---------------- Покупка диодов ---------------
if (TypeNumber == 4)
{
if (D1.Ok == true)
{
idComponent[QuanBoug] = D1.id;
Type[QuanBoug] = "Diod";
QuanBoug = QuanBoug + 1;
D1.AmSuit--;
return true;
}
}
// --------------------------------------------------
return false; // Если покупка не удалась
}


до
Кликните здесь для просмотра всего текста

// -------- Описание покупок (англ. - Purchase) ----------
public bool Purchase(Component component)
{
if (component.TestingOk())
{
idComponent[QuanBoug] = component.ID;
Type[QuanBoug] = component.NameComponent;
QuanBoug = QuanBoug + 1;
component.AmSuit--;
return true;
}
else
return false; // Если покупка не удалась
}


Вот примерный вариант. Посмотрите. Может быть он вам больше подойдет
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
 
    // Создаем базовый класс компонентов
    public class Component 
  {
      protected  int id;
      // Физические параметры для всех компонентов
      public int Height { get; set; }   // Высота
      public int Width  { get; set; }    // Ширина
      public int Thickn { get; set; }   // Толшина
      public int Color  { get; set; }    // Цвет
 
      public int HeightMAX {get; set;}
      public  int WidthMAX{get; set;}
      public int ThicknMAX { get; set;}
  // --------------------------------------
  /* Эта переменная хранит количество однотипных компонентов  с заданными
   * параметрами (англ. Amount of Suitable - количество годного) */
     public int AmSuit {get; set;}
  // Уникальный номер компонента с заданными параметрами
     public int ID
     {
         get // делаем свойство только для чтения
         {
             return id;
         }
     }
   // имя компонента  
     public string NameComponent {get; set; }
 
     
     public virtual  bool TestingOk()
     {
         if ( (Height < HeightMAX) && (Width < WidthMAX) && (Thickn < ThicknMAX) )                 
             return true;
         else       
            return false;
     }
  }
// ---------------------------------------------------
// Дочерний класс описывает объекты типа резистор
 public class Resistor : Component
  {
    public Resistor():base()
    {
        NameComponent = "резистор";
        id = 1;
    }
     
   // Дополнительные электрические параметры
      public int Resist {get; set;}   // Сопротивление 
      public double Power{get; set;} // Максимальная рассеиваемая мощность
 
      public int ResistMAX { get; set; }
      public double PowerMAX { get; set; }
 
  // Тестируем резистор на работоспособность
    public override bool TestingOk()
      {
        if (base.TestingOk() && (Resist < ResistMAX) && (Power < PowerMAX))
             return true;
         else
             return false;
     }
 }
 
 
// ---------------- Создаем класс люди -------------------
 public class People
  {
     protected string Name;     
     protected string Familie; 
  }
 
// --------------------------------------------------------- 
// Класс описывает объект типа "люди" - клиент (покупатель)
 public class Client : People
 {
     // ---------- Характеристики покупки -------------
     private int[] idComponent = new int[100];  // id купленных компонентов
     private string[] Type = new string[100];   // Тип купленных компонентов
     /* Количество купленных компонентов - QuanBoug
      * (от англ. - Quantity of the bought) */
     private int QuanBoug = 0;
     // --------------------------------------------------
     // Конструктор заполняет поля: имя и фамилия клиента
     public Client(string Cl_Name, string Cl_Familie)
     {
         Name = Cl_Name;        // Имя клиента
         Familie = Cl_Familie;  // Фамилия клиента
     }
 
 
     // -------- Описание покупок (англ. - Purchase) ----------
     public bool Purchase(Component component)
     {
         if (component.TestingOk())
         {
             idComponent[QuanBoug] = component.ID;
             Type[QuanBoug] = component.NameComponent;
             QuanBoug = QuanBoug + 1;
             component.AmSuit--;
             return true;
         }
         else
             return false;   // Если покупка не удалась
     }
 }
 
//примерная реализация покупки
    class Program
    {
        static void Main(string[] args)
        {
            Resistor resistor = new Resistor();
 
            // видимо, эти величины вы будете брать из textBox -ов
            resistor.Height = 1;
            resistor.Width = 1;
            resistor.Thickn = 1;
            resistor.Color = 1;
            resistor.Resist = 1;
            resistor.Power = 1;
            resistor.Resist = 1;
            resistor.Power = 1;
 
 
        Client client = new Client("Игорь", "Николаев");
 
        bool result = client.Purchase(resistor);
        if (result)
            Console.WriteLine("Покупка совершена");
        else
            Console.WriteLine("Покупка невозможна");
 
        }
    }
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.12.2013, 03:04

Перегрузка оператора в наследнике
Доброго времени суток. Интересует вопрос на счет перегрузки оператора в классе. Обьяснить трудно -...

Перекрытие InitializeComponent в классе наследнике
В общем есть wpf окно &quot;Window1&quot;, соответственно имеем Window1.xaml и Window1.xaml.cs и после...

Реализовать перегрузку оператора ввода в классе-наследнике
вопрос, наверное, глупый. Есть класс, содержащий массив (размер задется пользователем) и наследник...

Почему поле родительского класса не видимо в классе-наследнике?
Доброго времени суток! Прописал код с классом-наследником. И компилятор выдаёт, что нет доступа в...


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

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

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