0 / 0 / 1
Регистрация: 22.06.2015
Сообщений: 22

Методы наследования классов

22.06.2015, 18:08. Показов 1663. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Разработать класс OldPassport, являющийся наследником класса Passport, добавив следующие поля:
dateChange (дата обмена),
reason (причина обмена).

Предыдущее задание, на основе которого решается это (задание решено, программа работает):


Кликните здесь для просмотра всего текста
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
    public class Passport
    {
    public string Who { get; set; }
    public DateTime Date { get; set; }
    public int Number { get; set; }
    public int Serial { get; set; }
 
         public Passport(int serial, int number, DateTime date, string who)
    {
         Serial = serial;
         Number = number;
         Date = date;
         Who = who;
    }
 
         public DateTime GetChangeTime()
    {
             return Date.AddYears(15);
    }
 
         public static bool operator >(Passport a, Passport b)
    {
             return a.Date < b.Date;
    }
 
         public static bool operator <(Passport a, Passport b)
    {
             return a.Date > b.Date;
    }
 
         public override string ToString() //Автоматически вызовется при вызове Console.Write()
    {
             return String.Format("Серия паспорта: {0}, Номер: {1}, Дата выдачи: {2}, Кем выдан: {3}, Дата обмена {4}", Serial, Number, Date, Who, GetChangeTime());
    }
    }
 
 
         class Program
    {
         static void Main(string[] args)
    {
         const int PassportS_COUNT = 2; 
 
         Passport[] passports = new Passport[PassportS_COUNT];
         for (int i = 0; i < passports.Length; i++)
    {
         Console.WriteLine("Введите данные о {0} паспорте:", i + 1);
 
         Console.Write("    Серия: ");
         var serial = Convert.ToInt32(Console.ReadLine());
 
         Console.Write("    Номер: ");
         var number = Convert.ToInt32(Console.ReadLine());
 
         Console.Write("    Дата выдачи: ");
         var date = Convert.ToDateTime(Console.ReadLine());
 
         Console.Write("    Кем выдан: ");
         var who = Console.ReadLine();
 
         passports[i] = new Passport(serial, number, date, who);
     }
 
         PrintPassports(passports);
     }
            
 
         private static void PrintPassports(Passport[] passports)
     {
         Console.WriteLine("Список паспортов:");
         foreach (Passport passport in passports)
     {
         Console.WriteLine("    {0}", passport);
     }
         Console.ReadKey();
        
     }
 
 
     }
}


Код программы для класса наследника

Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
public class OldPassport : Passport
    {
        private string Reason { get; set; }
        private DateTime DateChange { get; set; }
 
        public OldPassport(DateTime dateChange, string reason)
    {
        DateChange = dateChange;
        Reason = reason;
    }
    }


И моя попытка собрать код воедино, увы неудачная

Кликните здесь для просмотра всего текста
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
    public class Passport
    {
        private string Who { get; set; }
        private DateTime Date { get; set; }
        private int Number { get; set; }
        private int Serial { get; set; }
 
        public Passport(int serial, int number, DateTime date, string who)
        {
            Serial = serial;
            Number = number;
            Date = date;
            Who = who;
        }
 
        public DateTime GetChangeTime()
        {
            return Date.AddYears(15);
        }
 
        public static bool operator >(Passport a, Passport b)
        {
            return a.Date < b.Date;
        }
 
        public static bool operator <(Passport a, Passport b)
        {
            return a.Date > b.Date;
        }
 
        public override string ToString() //Автоматически вызовется при вызове Console.Write()
        {
            return String.Format("Серия паспорта: {0}, Номер: {1}, Дата выдачи: {2}, Кем выдан: {3}, Дата обмена {4}", Serial, Number, Date, Who, GetChangeTime());
        }
    }
 
        public class OldPassport : Passport
    {
        private string Reason { get; set; }
        private DateTime DateChange { get; set; }
 
        public OldPassport(DateTime dateChange, string reason)
    {
        DateChange = dateChange;
        Reason = reason;
    }
    }
 
        class Program
    {
        static void Main(string[] args)
        {
            
        Passport[] passports = new Passport[2];
        for (int i = 0; i < passports.Length; i++)
        {
        Console.WriteLine("Введите данные о {0} паспорте:", i + 1);
 
        Console.Write("    Серия: ");
        var serial = Convert.ToInt32(Console.ReadLine());
 
        Console.Write("    Номер: ");
        var number = Convert.ToInt32(Console.ReadLine());
 
        Console.Write("    Дата выдачи: ");
        var date = Convert.ToDateTime(Console.ReadLine());
 
        Console.Write("    Кем выдан: ");
        var who = Console.ReadLine();
 
        passports[i] = new Passport(serial, number, date, who);
        }
 
        PrintPassports(passports);
 
        OldPassport[] OldPassport = new OldPassport[2];
        for (int i = 0; i < passports.Length; i++)
        {
        Console.WriteLine("Введите данные о {0} старом паспорте:", i + 1);
 
 
        Console.Write("    Дата обмена: ");
        var dateChange = Convert.ToDateTime(Console.ReadLine());
 
        Console.Write("    Причина обмена: ");
        var reason = Console.ReadLine();
 
        OldPassport[i] = new OldPassport(dateChange, reason);
        }
 
        PrintOldPassport(OldPassport);
        }
 
 
        private static void PrintPassports(Passport[] passports)
        {
        Console.WriteLine("Список паспортов:");
        foreach (Passport passport in passports)
        {
        Console.WriteLine("    {0}", passport);
        }
 
        }
 
        private static void PrintOldPassport(OldPassport[] OldPassport)
        {
        Console.WriteLine("Список паспортов:");
        foreach (OldPassport OldPassport in OldPassport)
        {
        Console.WriteLine("    {0}", OldPassport);
        }
        Console.ReadKey();
 
        }
 
    }
}


Приношу извинения за возможное неправильное оформление кода программы, в программировании я увы не спец, но хочу разобраться с данным заданием и буду признателен за указания на ошибки и советы по решению.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.06.2015, 18:08
Ответы с готовыми решениями:

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

Построение иерархии классов с использованием наследования
Доброго времени суток. У меня вот такая проблема. Недавно взял подкурс по С#. ПРоблема в том, что я пропустил одно занятие по Наследованию...

Разработать программу с использованием наследования классов
Разработать программу с использованием наследования классов, реализующую классы: • зверь; • кошка; • медведь. Используя виртуальные...

8
141 / 117 / 26
Регистрация: 07.12.2014
Сообщений: 371
22.06.2015, 18:26
Ну а что именно не так происходит?
0
0 / 0 / 1
Регистрация: 22.06.2015
Сообщений: 22
22.06.2015, 18:35  [ТС]
При отладке выдаются ошибки и сомнения к содержанию итогового кода, особенно к последней его части
C#
1
2
3
4
5
6
7
8
9
        private static void PrintPassports(Passport[] passports)
        {
        Console.WriteLine("Список паспортов:");
        foreach (Passport passport in passports)
        {
        Console.WriteLine("    {0}", passport);
        }
 
        }
и

C#
1
2
3
4
5
6
7
8
9
10
        private static void PrintOldPassport(OldPassport[] OldPassport)
        {
        Console.WriteLine("Список паспортов:");
        foreach (OldPassport OldPassport in OldPassport)
        {
        Console.WriteLine("    {0}", OldPassport);
        }
        Console.ReadKey();
 
        }
можно ли упростить запись, при условии что она верна?
0
141 / 117 / 26
Регистрация: 07.12.2014
Сообщений: 371
22.06.2015, 18:45
Ну а ошибки то какие?
0
0 / 0 / 1
Регистрация: 22.06.2015
Сообщений: 22
22.06.2015, 18:51  [ТС]
Ошибка 1 "ConsoleApplication1.Passport" не содержит конструктор, который принимает аргументы "0" строка 49 столбец 16

Ошибка 2 Невозможно объявить локальную переменную с именем "OldPassport" в этой области видимости, т.к. она придаст другое значение "OldPassport", которая уже используется в области видимости "родительский или текущий" для обозначения чего-то другого строка 115 столбец 30
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
22.06.2015, 19:04
Цитата Сообщение от simargl2013 Посмотреть сообщение
C#
1
2
3
4
5
public OldPassport(DateTime dateChange, string reason) 
{ 
   DateChange = dateChange; 
   Reason = reason; 
}
Это конструктор класса-наследника. А поля базового класса кто инициализировать будет?
Т.е. при создании экземпляра производного класса нужно вызвать конструктор базового класса и передать ему параметры:
C#
1
2
3
4
public OldPassport(DateTime dateChange, string reason, параметры_для_базового_конструктора ) : base (параметры_для_базового_конструктора)
{
   //...
}
Добавлено через 2 минуты
Цитата Сообщение от simargl2013 Посмотреть сообщение
C#
1
foreach (OldPassport OldPassport in OldPassport)
А здесь и коллекция и тип и переменная цикла называются OldPassport.
1
0 / 0 / 1
Регистрация: 22.06.2015
Сообщений: 22
22.06.2015, 19:34  [ТС]
Благодарю! Внёс изменения в код
Кликните здесь для просмотра всего текста
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
    public class Passport
    {
        private string Who { get; set; }
        private DateTime Date { get; set; }
        private int Number { get; set; }
        private int Serial { get; set; }
 
        public Passport(int serial, int number, DateTime date, string who)
        {
            Serial = serial;
            Number = number;
            Date = date;
            Who = who;
        }
 
        public DateTime GetChangeTime()
        {
            return Date.AddYears(15);
        }
 
        public static bool operator >(Passport a, Passport b)
        {
            return a.Date < b.Date;
        }
 
        public static bool operator <(Passport a, Passport b)
        {
            return a.Date > b.Date;
        }
 
        public override string ToString() //Автоматически вызовется при вызове Console.Write()
        {
            return String.Format("Серия паспорта: {0}, Номер: {1}, Дата выдачи: {2}, Кем выдан: {3}, Дата обмена {4}", Serial, Number, Date, Who, GetChangeTime());
        }
    }
 
        public class OldPassport : Passport
    {
        private string Reason { get; set; }
        private DateTime DateChange { get; set; }
 
        public OldPassport(DateTime dateChange, string reason, int serial, int number, DateTime date, string who): base (serial, number, date, who)
{
    {
        DateChange = dateChange;
        Reason = reason;
    }
    }
 
        class Program
        {
            static void Main(string[] args)
            {
 
                Passport[] passports = new Passport[2];
                for (int i = 0; i < passports.Length; i++)
                {
                    Console.WriteLine("Введите данные о {0} паспорте:", i + 1);
 
                    Console.Write("    Серия: ");
                    var serial = Convert.ToInt32(Console.ReadLine());
 
                    Console.Write("    Номер: ");
                    var number = Convert.ToInt32(Console.ReadLine());
 
                    Console.Write("    Дата выдачи: ");
                    var date = Convert.ToDateTime(Console.ReadLine());
 
                    Console.Write("    Кем выдан: ");
                    var who = Console.ReadLine();
 
                    passports[i] = new Passport(serial, number, date, who);
                }
 
                PrintPassports(passports);
 
                OldPassport[] OldPassport = new OldPassport[2];
                for (int i = 0; i < passports.Length; i++)
                {
                    Console.WriteLine("Введите данные о {0} старом паспорте:", i + 1);
 
 
                    Console.Write("    Дата обмена: ");
                    var dateChange = Convert.ToDateTime(Console.ReadLine());
 
                    Console.Write("    Причина обмена: ");
                    var reason = Console.ReadLine();
 
                    OldPassport[i] = new OldPassport(dateChange, reason);
                }
 
                PrintOldPassport(OldPassport);
            }
 
 
            private static void PrintPassports(Passport[] passports)
            {
                Console.WriteLine("Список паспортов:");
                foreach (Passport passport in passports)
                {
                    Console.WriteLine("    {0}", passport);
                }
 
            }
 
            private static void PrintOldPassport(OldPassport[] OldPassport)
            {
                Console.WriteLine("Список старых паспортов:");
                foreach (OldPassport Passport in OldPassport)
                {
                    Console.WriteLine("    {0}", OldPassport);
                }
                Console.ReadKey();
 
            }
            }
 
    }
}


но ошибка в Ошибка "ConsoleApplication1.OldPassport" не содержит конструктор, который принимает аргументы "2" в строке 96 столбце 38 осталась

C#
1
OldPassport[i] = new OldPassport(dateChange, reason);
0
141 / 117 / 26
Регистрация: 07.12.2014
Сообщений: 371
22.06.2015, 19:44
simargl2013, правильно. Вы же изменили конструктор.Теперь он принимает больше параметров.Логично, что он ругается, что ему передают всего 2
1
0 / 0 / 1
Регистрация: 22.06.2015
Сообщений: 22
22.06.2015, 20:02  [ТС]
Благодарю за советы!
Кликните здесь для просмотра всего текста
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
    public class Passport
    {
        private string Who { get; set; }
        private DateTime Date { get; set; }
        private int Number { get; set; }
        private int Serial { get; set; }
 
        public Passport(int serial, int number, DateTime date, string who)
        {
            Serial = serial;
            Number = number;
            Date = date;
            Who = who;
        }
 
        public DateTime GetChangeTime()
        {
            return Date.AddYears(15);
        }
 
        public static bool operator >(Passport a, Passport b)
        {
            return a.Date < b.Date;
        }
 
        public static bool operator <(Passport a, Passport b)
        {
            return a.Date > b.Date;
        }
 
        public override string ToString() //Автоматически вызовется при вызове Console.Write()
        {
            return String.Format("Серия паспорта: {0}, Номер: {1}, Дата выдачи: {2}, Кем выдан: {3}, Дата обмена {4}", Serial, Number, Date, Who, GetChangeTime());
        }
    }
 
        public class OldPassport : Passport
    {
        private string Reason { get; set; }
        private DateTime DateChange { get; set; }
 
        public OldPassport(DateTime dateChange, string reason, int serial, int number, DateTime date, string who): base (serial, number, date, who)
{
    {
        DateChange = dateChange;
        Reason = reason;
    }
    }
 
        class Program
        {
            static void Main(string[] args)
            {
 
                Passport[] passports = new Passport[2];
                for (int i = 0; i < passports.Length; i++)
                {
                    Console.WriteLine("Введите данные о {0} паспорте:", i + 1);
 
                    Console.Write("    Серия: ");
                    var serial = Convert.ToInt32(Console.ReadLine());
 
                    Console.Write("    Номер: ");
                    var number = Convert.ToInt32(Console.ReadLine());
 
                    Console.Write("    Дата выдачи: ");
                    var date = Convert.ToDateTime(Console.ReadLine());
 
                    Console.Write("    Кем выдан: ");
                    var who = Console.ReadLine();
 
                    passports[i] = new Passport(serial, number, date, who);
                }
 
                PrintPassports(passports);
 
                OldPassport[] OldPassport = new OldPassport[2];
                for (int i = 0; i < passports.Length; i++)
                {
                    Console.WriteLine("Введите данные о {0} старом паспорте:", i + 1);
 
 
                    Console.Write("    Дата обмена: ");
                    var dateChange = Convert.ToDateTime(Console.ReadLine());
 
                    Console.Write("    Причина обмена: ");
                    var reason = Console.ReadLine();
 
                    Console.Write("    Серия: ");
                    var serial = Convert.ToInt32(Console.ReadLine());
 
                    Console.Write("    Номер: ");
                    var number = Convert.ToInt32(Console.ReadLine());
 
                    Console.Write("    Дата выдачи: ");
                    var date = Convert.ToDateTime(Console.ReadLine());
 
                    Console.Write("    Кем выдан: ");
                    var who = Console.ReadLine();
 
                    OldPassport[i] = new OldPassport(dateChange, reason, serial, number, date, who);
                }
 
                PrintOldPassport(OldPassport);
            }
 
 
            private static void PrintPassports(Passport[] passports)
            {
                Console.WriteLine("Список паспортов:");
                foreach (Passport passport in passports)
                {
                    Console.WriteLine("    {0}", passport);
                }
 
            }
 
            private static void PrintOldPassport(OldPassport[] OldPassport)
            {
                Console.WriteLine("Список старых паспортов:");
                foreach (OldPassport Passport in OldPassport)
                {
                    Console.WriteLine("    {0}", OldPassport);
                }
                Console.ReadKey();
 
            }
            }
 
    }
}


Немного подредактирую и выложу готовый результат
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.06.2015, 20:02
Помогаю со студенческими работами здесь

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

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

Применение свойства наследования на примере виртуальных и абстрактных классов
Требование к заданию : Дан абстрактный класс «Геометрическая фигура», внутри него определить абстрактные и (или) виртуальные методы. ...

Применение свойства наследования для расширения и уточнения классов
Реализовать иерархию классов Х-&gt;Y. В классе Х присутствуют данные х1, х2. В классе Y-данное y. Методами классов представить конструктор,...

Применение свойства наследования на примере виртуальных и абстрактных классов
Дан абстрактный класс «Геометрическая фигура», внутри него определить абстрактные и (или) виртуальные методы. Производным классом...


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

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

Новые блоги и статьи
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
PowerShell и онлайн сервисы. Валюта (floatrates.com руб.)
iNNOKENTIY21 11.11.2025
PowerShell функция floatrates-rub Примеры вызова: # Указанная валюта 'EUR' floatrates-rub -Code 'EUR' # Список имеющихся кодов валют floatrates-rub -Available function floatrates-rub {
PowerShell и онлайн сервисы. Погода (RP5.ru)
iNNOKENTIY21 11.11.2025
PowerShell функция Get-WeatherRP5rss для получения погоды с сервиса RP5 Примеры вызова Get-WeatherRP5rss с указанием id 5484 — Москва (восток, Измайлово) и переносом строки:. . .
PowerShell и онлайн сервисы. Погода (wttr)
iNNOKENTIY21 11.11.2025
PowerShell Функция для получения погоды с сервиса wttr Примеры вызова: Погода в городе Омск с прогнозом на день, можно изменить прогноз на более дней, для этого надо поменять запрос:. . .
PowerShell и онлайн сервисы. Валюта (ЦБР)
iNNOKENTIY21 11.11.2025
# Получение курса валют function cbr (] $Valutes = @('USD', 'EUR', 'CNY')) { $url = 'https:/ / www. cbr-xml-daily. ru/ daily_json. js' $data = Invoke-RestMethod -Uri $url $esc = 27 . . .
И решил я переделать этот ноут в машину для распределенных вычислений
Programma_Boinc 09.11.2025
И решил я переделать этот ноут в машину для распределенных вычислений Всем привет. А вот мой компьютер, переделанный из ноутбука. Был у меня ноут асус 2011 года. Со временем корпус превратился. . .
Мысли в слух
kumehtar 07.11.2025
Заметил среди людей, что по-настоящему верная дружба бывает между теми, с кем нечего делить.
Новая зверюга
volvo 07.11.2025
Подарок на Хеллоуин, и теперь у нас кроме Tuxedo Cat есть еще и щенок далматинца: Хочу еще Симбу взять, очень нравится. . .
Инференс ML моделей в Java: TensorFlow, DL4J и DJL
Javaican 05.11.2025
Python захватил мир машинного обучения - это факт. Но когда дело доходит до продакшена, ситуация не так однозначна. Помню проект в крупном банке три года назад: команда data science натренировала. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru