Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
vladis23
13 / 13 / 10
Регистрация: 25.05.2015
Сообщений: 519
1

Абстрактный класс

27.04.2016, 18:03. Просмотров 1656. Ответов 25
Метки нет (Все метки)

Создать абстрактный класс Person с полями фамилии, имени, года рождения. Создать производные классы: школьник со своим методом вывода информации - фамилия, имя, год рождения, класс и выпускник с методом вывода информации - фамилия, имя, год рождения, средний балл аттестата. Покажите как реализовать абстрактный класс с его потомками
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.04.2016, 18:03
Ответы с готовыми решениями:

Создать абстрактный класс Товар
И так сам курсачь состоит из трех заданий: ПЕРВОЕ:создать абстрактный класс...

Создать абстрактный класс - млекопитающие
Задание : Создать абстрактный класс – млекопитающие. Определить производные...

Создать абстрактный базовый класс с виртуальной функцией
Добрый день! Помогите пожалуйста. Создать абстрактный базовый класс с...

Создать абстрактный класс Figure с методами вычисления площади и периметра, а также методом, выводящим информацию
Помогите пожалуйста,вот задания: 1. Создать абстрактный класс Figure с...

Реализовать абстрактный тип данных
Реализовать абстрактный тип данных Стек в виде класса с помощью динамических...

25
vladis23
13 / 13 / 10
Регистрация: 25.05.2015
Сообщений: 519
29.04.2016, 00:08  [ТС] 2
Есть кто-нибудь кто понимает абстрактные классы в Delphi
0
Kitayets
338 / 292 / 103
Регистрация: 09.09.2011
Сообщений: 1,041
29.04.2016, 01:47 3
абстрактные классы в Delphi ничем не отличаются от таковых в других языках типа java или c#.

объяви класс и хотя бы один метод объяви абстрактным. потом наследника и переопредели абстрактный метод в нем. вот и все.

но сам пример надуманный.
0
northener
29.04.2016, 02:37
  #4

Не по теме:

Цитата Сообщение от Kitayets Посмотреть сообщение
но сам пример надуманный.
Ну конечно. Пример с TFigure и его наследниками TSquare и TCircle гораздо менее надуманный!
:)

0
harrybook
66 / 66 / 37
Регистрация: 27.04.2016
Сообщений: 254
29.04.2016, 03:02 5
Абстрактный класс содержит абстрактные методы (abstract). Такое себе резервирование для потомков.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// базовый
tPerson = class
  protected
   fam, name : string;    // фам. имя
   year         : longint;  // год
  public
    procedure MethodOutput;virtual; abstract;  // реализация не нужна
end;
// Школьник
tScoolboy = class(tPerson)
 protected
   cls : byte; // класс
 public
   procedure MethodOutput;override; // потребует реализации
 end;
***
по такой же схеме "Выпускник"
0
northener
пофигист широкого профиля
3423 / 2323 / 630
Регистрация: 15.07.2013
Сообщений: 13,742
29.04.2016, 03:18 6
harrybook, longint и byte очень режут глаз в описании класса. Ну не надо их там использовать.
Ну и поле
Цитата Сообщение от harrybook Посмотреть сообщение
cls : byte; // класс
вообще не понятно для чего нужно.
0
harrybook
66 / 66 / 37
Регистрация: 27.04.2016
Сообщений: 254
29.04.2016, 03:24 7
northener,
из задачи:
школьник со своим методом вывода информации - фамилия, имя, год рождения, класс
0
northener
пофигист широкого профиля
3423 / 2323 / 630
Регистрация: 15.07.2013
Сообщений: 13,742
29.04.2016, 03:30 8
Цитата Сообщение от harrybook Посмотреть сообщение
northener,
из задачи:
Это ты об чём? Если о необходимости переменной cls в классе наследнике, то она нафиг никому не нужна.
Нужны пояснения - спрашивай.
0
harrybook
66 / 66 / 37
Регистрация: 27.04.2016
Сообщений: 254
29.04.2016, 03:41 9
Цитата Сообщение от northener Посмотреть сообщение
Нужны пояснения - спрашивай.
Обязательно.
0
northener
пофигист широкого профиля
3423 / 2323 / 630
Регистрация: 15.07.2013
Сообщений: 13,742
29.04.2016, 03:47 10
Цитата Сообщение от harrybook Посмотреть сообщение
Обязательно.
Что "Обязательно"?
Если мы создадим экземпляр класса tScoolboy
Delphi
1
Scoolboy:=tScoolboy.Create;
и вызовем его метод
Delphi
1
Scoolboy.MethodOutput
, то вызовется именно метод
Delphi
1
tScoolboy.MethodOutput
И нафига нам cls?
0
harrybook
66 / 66 / 37
Регистрация: 27.04.2016
Сообщений: 254
29.04.2016, 03:54 11
northener,
А в чём проблема?
0
northener
пофигист широкого профиля
3423 / 2323 / 630
Регистрация: 15.07.2013
Сообщений: 13,742
29.04.2016, 04:00 12
Цитата Сообщение от harrybook Посмотреть сообщение
northener,
А в чём проблема?
У меня лично проблем нет. Я только пытаюсь иногда помочь/подсказать что-то тем новичкам, которые сами пишут код. Если тебе моя помощь/мои советы не нужны, то я уйду из этого топика.
0
harrybook
66 / 66 / 37
Регистрация: 27.04.2016
Сообщений: 254
29.04.2016, 04:11 13
Цитата Сообщение от northener Посмотреть сообщение
Если тебе моя помощь/мои советы не нужны, то я уйду из этого топика.
Мне точно не нужны, но топик не мой, вопрос не я задал. Абстрактные методы вообще лучше не использовать - написать пустышку, а все поля забросить в базовый класс. Но в задаче прописано именно "абстрактный", человеку нужна наглядность. Как и что он там реализует, вопрос второй. Не проще было выложить свою версию?
Без обид.
0
northener
пофигист широкого профиля
3423 / 2323 / 630
Регистрация: 15.07.2013
Сообщений: 13,742
29.04.2016, 04:21 14
Цитата Сообщение от harrybook Посмотреть сообщение
Не проще было выложить свою версию?
Давно надоело в энный раз писать один и тот же код. Особенно повторяя код из учебников про TFigure и его наследников TSquare и TCircle.
Но раз именно тебе мои советы не нужны, то я ухожу из топика.
0
BOGG ART
29.04.2016, 09:10
  #15

Не по теме:

Он видимо просто имеет ввиду что для Персоны нет понятия "Класс", оно есть только для Школьника.

0
DenNik
Непрофессионал
1801 / 1392 / 307
Регистрация: 26.07.2011
Сообщений: 7,827
29.04.2016, 10:46 16
Цитата Сообщение от northener Посмотреть сообщение
вообще не понятно для чего нужно.
Класс, в котором учится школьник. где его хранить, по-твоему? )
0
Kitayets
338 / 292 / 103
Регистрация: 09.09.2011
Сообщений: 1,041
29.04.2016, 15:45 17
Цитата Сообщение от northener Посмотреть сообщение
Ну конечно. Пример с TFigure и его наследниками TSquare и TCircle гораздо менее надуманный!
Я имел в виду что такая иерархия с абстрактным классом вверху обычно придумывается для релизации каких-то обобщенных методов обработки. Например TStream <- (TFileStream, TMemoryStream, TSocketStream,...).
Т.е. проектирование иерархии классов без какой-то цели их дальнейшего использования это как-то слишком абстрактно и наверно не корректно.

Кроме того у классиков можно подчеркнуть, что "школьник" это скорее "роль", чем подвид персоны, ведь сегодня ты школьник, а завтра выпускник, или ты школьник в обычной школе и одновременно выпускник в музыкальной... Предложенная иерархия не позволит реализовать такое. Но это все конечно "теория", ведь не известна цель для которой эти классы проектируются.

что касается изначального вопроса - то он чисто на синтаксис, просто открывай справку про абстрактные классы и переписывай меня названия полей и методов. Но автор почему-то не хочет себя этим утруждать....
0
vladis23
13 / 13 / 10
Регистрация: 25.05.2015
Сообщений: 519
30.04.2016, 12:08  [ТС] 18
Поле класс - это в каком классе он учится

Добавлено через 55 минут
Я так сделал, но он не работает, не компилируется
Delphi
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
unit modul;
 
 
 
     interface
     uses SysUtils;
          type
   TPerson = class
     private
     FSurname:string;
     FName:string;
     FYear:byte;
     public
            constructor create(f:string;n:string;d:byte);virtual;
              property Surname:string read FSurname write FSurname;
      property Name:string read FName write Fname;
      property Year:Byte read FYear write FYear;
 
       protected
       function Show:string;virtual;abstract;
 
       end;
       type
         TSchoolBoy = class(TPerson)
         private
           Fklass:Byte;
           public
             constructor create(k:byte);overload;
 
             property klass:Byte read Fklass write Fklass;
                   function Show:string;override;
             end;
             type
             TGraduate = class(TPerson)
             private
               Fsr_ball:Extended;
               public
                 constructor create(sr:Extended); overload;
 
                 property sr_ball:Extended read Fsr_ball write Fsr_ball;
                 protected
                   function Show:string;override;
                 end;
implementation
 
{ TPerson }
 
constructor TPerson.create(f, n: string; d: byte);
begin
FSurname:=f;
Fname:=n;
FYear:=d;
end;
{ TSchoolBoy }
 
constructor TSchoolBoy.create(k: byte);
begin
  Fklass:=k;
end;
 
function TSchoolBoy.Show: string;
begin
  Result:=IntToStr(Fklass)+chr(13);
end;
 
{ TGraduate }
 
constructor TGraduate.create(sr: Extended);
begin
  Fsr_ball:=sr;
end;
 
function TGraduate.Show: string;
begin
 
 Result:=FloatToStr(Fsr_ball);
end;
 
end.
0
vladis23
13 / 13 / 10
Регистрация: 25.05.2015
Сообщений: 519
30.04.2016, 12:25  [ТС] 19
Если не понятно вот такое задание
0
Миниатюры
Абстрактный класс  
vladis23
13 / 13 / 10
Регистрация: 25.05.2015
Сообщений: 519
30.04.2016, 14:01  [ТС] 20
harrybook, Как реализовать методы?
Delphi
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
unit abstract_class;
 
interface
uses SysUtils;
type
//класс Персона
 TPerson = class
 // элементы класса недоступны в не модуля в котором определен класс
 private
 FSurname:string; //поле фамилия
 Fname:string;    // поле имя
 Fyear:Word;      //  поле год рождения
// защищенные элементы класса
 protected
  procedure MethodOutput;virtual;abstract //реализация не нужна будет в потомках класса реализация
// Общедоступные
  public
    property Surname:string read FSurname write FSurname;
    property Name:string read Fname write Fname;
    property Year:Word read Fyear write Fyear;
    constructor create (S,N:string; Y:Word); // конструктор с параметрами фамилие, имя, год рождения
     end;
     type
       TSchoolBoy = class(TPerson)
       private
         Fclass:Byte;
       public
         constructor create (k:Byte);
           procedure MethodOutput;override;
           property cls:Byte read Fclass write Fclass;
       end;
   type
   TGraduate = class(TPerson)
   private
     Fsr_ball:Extended;
     public
       procedure MethodOutput; override;
       constructor create (sr_ball:Extended);
       property srednee:Extended read Fsr_ball write Fsr_ball;
       end;
 
 
 
 
 
implementation
  constructor Tperson.create(s,n:string;y:word);
  begin
   FSurname:=s;
   Fname:=n;
   Fyear:=y;
     // установка области используя метод MethodOutput:
     // Этот запрос будет удовлетворен только подклассом
   MethodOutput;
  end;
 
 
{ TSchoolBoy }
 
constructor TSchoolBoy.create(k: Byte);
begin
Fclass:=k;
end;
 
procedure TSchoolBoy.MethodOutput;
begin
  inherited ;
       // что писать в этом методе?
 
 
 
end;
 
{ TGraduate }
 
 
 
 
{ TGraduate }
 
constructor TGraduate.create(sr_ball: Extended);
begin
Fsr_ball:=sr_ball;
end;
 
procedure TGraduate.MethodOutput;
begin
  inherited;
   // что писать здесь?
end;
 
end.
0
30.04.2016, 14:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.04.2016, 14:01

Класс: Нужно написать класс,который будет вычислять заданную функцию...
Нужно написать класс,который будет вычислять вот такую функцию y= \sqrt{1/x^n}...

Класс: Разработать класс, описывающий объект "Телефонный звонок"
Всем добрый вечер))) Пожалуйста помогите, очень прошу Разработать класс,...

Создать родительский класс "Прямоугольник" и к нему подключить дочерний класс "Куб"
Передомной была поставлена задача создать родительский клас прямоугольник и к...


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

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

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