Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
3 / 3 / 2
Регистрация: 07.10.2011
Сообщений: 87

Полиморфизм( где ошибка?)

02.12.2011, 19:18. Показов 970. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Проблема вот в чем - от класса Работник наследую класс инженер - они отличаются одним полем - названием Вуза для инженера. Переопределяю в инженере класс Display -(virtual/override) - компиллятор бьет ошибку - хотя если сделать данные полей в работнике protected все идет нормально и без переопределения. Что я упустил из вида в переопределении метода Display?



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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
 
 
    class Program
    {
        static void Main(string[] args)
        {
 
            Rabotnik Norman = new Rabotnik("Норман", 23, "Aтланта", "ПТУ 113", 122434466);
            Ingeneer Batman = new Ingeneer("Полли", 25, "Сакраменто", "БНТУ",134256 , "Secret Place");
 
            Norman.Display();
            Batman.Display();
            
            Console.ReadKey();
 
 
        }
    }
 
    class Rabotnik
    {
       string Name;
       int Age;
       string predMestoRaboty;
       string MestoYcheby;
       int NomerSSN;
 
 
 
        public Rabotnik(string name, int age, string mr, string my, int nomer)
        {
 
            this.Name = name;
            this.Age = age;
            this.predMestoRaboty = mr;
            this.MestoYcheby = my;
            this.NomerSSN = nomer;
 
 
        }
 
        public virtual void Display()
        {
            Console.WriteLine("Информация о работнике");
            Console.WriteLine(Name);
            Console.WriteLine(Age);
            Console.WriteLine(predMestoRaboty);
            Console.WriteLine(MestoYcheby);
            Console.WriteLine(NomerSSN);
            Console.WriteLine();
          
        }
 
    }
 
        class Ingeneer: Rabotnik
        {
           public string Vuz { get; set; }
 
            public Ingeneer(string name, int age, string mr, string my, int nomer, string vuz)
                :base ( name,  age,  mr, my,  nomer)
            {
            
                this.Vuz = vuz;            
            }
 
            public override void Display()
            {
                Console.WriteLine("Информация о работнике");
                Console.WriteLine(Name);
                Console.WriteLine(Age);
                Console.WriteLine(predMestoRaboty);
                Console.WriteLine(MestoYcheby);
                Console.WriteLine(NomerSSN);
                Console.WriteLine(Vuz);
                Console.WriteLine();
 
            }
           
        
        }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.12.2011, 19:18
Ответы с готовыми решениями:

Показать, где в коде наследование, где полиморфизм, и где инкапсуляция
Program program1; Uses GraphABC; Type TFigure=class x,y:integer; c:color; procedure draw(pc:color); abstract; end; Type...

Полиморфизм. Где он должен быть
в коде отсутствует полиморфизм, он должен быть в main. но все вроде сделано верно вот задание:2. На основе класса Complex, реализованного...

Написать простейшую программу, где задействованы наследование, полиморфизм или инкапсуляция
Ребята у меня завтра экзамен по ООП в 17:00(Объектно-ориентированное программирование )Я перевёлся на факультет "Информатика и...

4
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
02.12.2011, 19:26
Вот всё работает. Ну надо делать protected поля, чтобы заработало. Вот то, что нужно:
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
    class Rabotnik
    {
        protected string name;
        protected int age;
        protected string predMestoRaboty;
        protected string mestoYcheby;
        protected int nomerSSN;
 
        public Rabotnik(string name, int age, string mr, string my, int nomer)
        {
            this.name = name;
            this.age = age;
            this.predMestoRaboty = mr;
            this.mestoYcheby = my;
            this.nomerSSN = nomer;
        }
 
        public virtual void Display()
        {
            Console.WriteLine("Информация о работнике");
            Console.WriteLine(name);
            Console.WriteLine(age);
            Console.WriteLine(predMestoRaboty);
            Console.WriteLine(mestoYcheby);
            Console.WriteLine(nomerSSN);
        }
    }
 
    class Ingeneer : Rabotnik
    {
        public string Vuz { get; set; }
 
        public Ingeneer(string name, int age, string mr, string my, int nomer, string vuz)
            : base(name, age, mr, my, nomer)
        {
            this.Vuz = vuz;
        }
 
        public override void Display()
        {
            base.Display();
            Console.WriteLine(Vuz);
        }
    }
0
3 / 3 / 2
Регистрация: 07.10.2011
Сообщений: 87
02.12.2011, 19:29  [ТС]
Цитата Сообщение от Lorienara Посмотреть сообщение
хотя если сделать данные полей в работнике protected все идет нормально и без переопределения. Что я упустил из вида в переопределении метода Display?
Ну я просто думал что можно добиться результата - в данном случае 2мя способами - 1 получилось Protected,а с переопределением не очень - а в книжке был очень похожий пример через переопределение - я подумал что что-то упускаю.
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
02.12.2011, 19:31
Вообще мне кажется, что методы классов выводящие инфу на консоль это как-то не гуд.

Добавлено через 2 минуты
Цитата Сообщение от Lorienara Посмотреть сообщение
а с переопределением не очень - а в книжке был очень похожий пример через переопределение - я подумал что что-то упускаю
Я поправил код, глянь ещё раз.
1
3 / 3 / 2
Регистрация: 07.10.2011
Сообщений: 87
02.12.2011, 19:33  [ТС]
Это просто мой пример - я его выдумал чтобы попрактиковаться, сам знаю это не верх мысли выводить инфу на консоль ( но что придумал то придумал) - прикольное решение))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.12.2011, 19:33
Помогаю со студенческими работами здесь

Ошибка в программе на полиморфизм
Написал один мелкий проект чтоб опробовать полиморфизм. Класс TwoDimensional, в который входят классы RECT и CIRCLE. Но при компиляции...

Полиморфизм: ошибка линкеровки
Чёт не работает. #include "stdafx.h" //#include "Figure.h" #include <iostream> class Test { public: ...

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

Smart pointers + полиморфизм + делегирование. Ошибка компиляции
Доброго времени суток, уважаемые форумчане! Есть вопрос по поводу использования умных указателей в качестве указателей на абстрактные...

Инкапсуляция. Наследование. Полиморфизм. Не понимаю в чем моя ошибка
Само задание: Реализовать класс BytesConverter с полем bytes. В конструкторе присвоить bytes значение 0. Реализовать методы setBytes(int...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru