С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
1 / 1 / 0
Регистрация: 16.12.2010
Сообщений: 38

Наследование классов: доступность базового класса

16.05.2011, 22:43. Показов 2024. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребят подскажите пожалуйста что не так с наследованием, т.к. компилятор ругается на доступность базового класса
хотя везде public
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication37
{
    class Program
    {
        public static void Main(string[] args)
        {
            Console.WriteLine("Введите часы");
            int h;
            h = Convert.ToInt32(Console.ReadLine());
 
            Console.WriteLine("Введите минуты");
            int m;
            m = Convert.ToInt32(Console.ReadLine());
            Time t = new Time(h, m);
 
            Console.WriteLine("Добавьте минуты");
            int d;
            d = Convert.ToInt32(Console.ReadLine());
 
            t.AddMinute(d);
 
            Console.WriteLine("Итоговое время");
            Console.WriteLine(t.GetTime());
            Console.ReadLine();
        }
    }
    class Time
    {
        int hour;
        int minute;
 
        public Time(int _hour, int _minute)
        {
            if (VerificationTime(_hour, _minute))
            {
                hour = _hour;
                minute = _minute;
            }
        }
 
        public int Hour
        {
            get { return hour; }
            set { hour = value; }
        }
 
        public int Minute
        {
            get { return minute; }
            set { minute = value; }
        }
 
        public int CountMinute
        {
            get
            {
                TimeSpan t = DateTime.Now.Date.AddHours((double)hour).AddMinutes((double)minute) - DateTime.Now.Date;
                return (int)t.TotalMinutes;
            }
        }
 
        public string GetTime()
        {
            return hour + ":" + minute;
        }
 
        public bool VerificationTime(int a, int b)
        {
            if ((a < 24 && a >= 0) && (b < 60 && b >= 0))
                return true;
            else
                return false;
        }
 
        public void AddMinute(int x)
        {
            minute += x;
            if (minute / 60 > 0)
            {
                hour += minute / 60;
                minute = minute % 60;
            }
        }
    }
    public class Date : Time
    {
        public static void Main()
    {
        Date mydate = new Date();
 
        Console.WriteLine("Введите месяц");
        int mm;
        mm = Convert.ToInt32(Console.ReadLine());
        mydate.month = mm;
 
        Console.WriteLine("Введите день");
        int md;
        md = Convert.ToInt32(Console.ReadLine());
        mydate.day = md;
 
        Console.WriteLine("Введите год");
        int my;
        my = Convert.ToInt32(Console.ReadLine());
        mydate.year = my;
 
        Console.WriteLine("{0} День по счету", mydate.DayOfYear());
        Console.ReadLine();
    }
}
 public class Date
{
    public int year;
    public int month;
    public int day;
 
    public static bool IsLeapYear(int year)
    {
        return (year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0));
    }
 
    public int DayOfYear()
    {
        int[] MonthDays = new int[] {   0,  31,  59,  90, 120, 151,
                                        181, 212, 243, 273, 304, 334 };
        return MonthDays[month - 1] + day +
                           (month > 2 && IsLeapYear(year) ? 1 : 0);
    }
}
}
и ещё как сделать переопределение виртуального метода ?
заранее спасибо
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.05.2011, 22:43
Ответы с готовыми решениями:

Наследование классов - изменить метод базового класса
В программе прописан родительский класс (BaseList) и два дочерних (ListChain и MasList). Хотелось бы прописать 2 метода сортировки Sort (...

Наследование:переменные базового класса
В общем по книге Г.Шилдт делал пример из книги и почему то выдаёт много ошибок. using System; using System.Collections.Generic; ...

Наследование и члены базового класса
Господа скажите пожалуйста, если в базовом классе есть конструктор, который принимает один целочисленный параметр, который в дальнейшем...

9
1 / 1 / 0
Регистрация: 16.12.2010
Сообщений: 38
16.05.2011, 23:34  [ТС]
с одним классом более менее
а что с наследованием нет..
0
мастер топоров
 Аватар для Koran
917 / 742 / 101
Регистрация: 16.08.2009
Сообщений: 1,476
17.05.2011, 00:00
если бы я был компилятором я бы не понял какой из методов Main() использовать как точку входа в программу - у вас их два: в классе Program и в классе Date:Time
у меня компилятор заругался в вашем коде именно на повторное определение класса Date
0
1 / 1 / 0
Регистрация: 16.12.2010
Сообщений: 38
17.05.2011, 00:21  [ТС]
первый Main() как точка входа

при удалении второго появляются ошибки
как именно тогда переделать.подскажите?
0
гроза ленивых студентов
 Аватар для znake
456 / 411 / 51
Регистрация: 27.03.2011
Сообщений: 823
17.05.2011, 00:38
Цитата Сообщение от Koran Посмотреть сообщение
если бы я был компилятором я бы не понял какой из методов Main() использовать как точку входа в программу - у вас их два: в классе Program и в классе Date:Time
у меня компилятор заругался в вашем коде именно на повторное определение класса Date
просто уточню - два метода Main действительно лишние, но ругань компилятора на повторное определение класса относится не к методу Main - она относится к тому, что класс Date определен дважды:
C#
1
2
public class Date : Time //строка 90
public class Date //строка 115


Цитата Сообщение от масьkа Посмотреть сообщение
как именно тогда переделать.подскажите?
в зависимости от целей...я более-менее смог понять что ты пыталась сделать с классом Time, а вот твои действия с классом Date -не осилил... а точнее - не смог понять, что же пыталась сделать обоими своими классами Date, поэтому и предложить пути решения тоже не могу..
0
 Аватар для WonderFlik
208 / 138 / 15
Регистрация: 28.04.2011
Сообщений: 389
17.05.2011, 10:15
Как то так....

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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication37
{
    class Program
    {
        public static void Main(string[] args)
        {
            Console.WriteLine("Введите часы");
            int h;
            h = Convert.ToInt32(Console.ReadLine());
 
            Console.WriteLine("Введите минуты");
            int m;
            m = Convert.ToInt32(Console.ReadLine());
            Time t = new Time(h, m);
 
            Console.WriteLine("Добавьте минуты");
            int d;
            d = Convert.ToInt32(Console.ReadLine());
 
            t.AddMinute(d);
 
            Console.WriteLine("Итоговое время");
            Console.WriteLine(t.GetTime());
            Console.ReadLine();
            Date mydate = new Date();
 
            Console.WriteLine("Введите месяц");
            int mm;
            mm = Convert.ToInt32(Console.ReadLine());
            mydate.month = mm;
 
            Console.WriteLine("Введите день");
            int md;
            md = Convert.ToInt32(Console.ReadLine());
            mydate.day = md;
 
            Console.WriteLine("Введите год");
            int my;
            my = Convert.ToInt32(Console.ReadLine());
            mydate.year = my;
 
            Console.WriteLine("{0} День по счету", mydate.DayOfYear());
            Console.ReadLine();
        }
    }
    public class Time
    {
        int hour;
        int minute;
 
        public Time() { hour = 0; minute = 0; }
        public Time(int _hour, int _minute)
        {
            if (VerificationTime(_hour, _minute))
            {
                hour = _hour;
                minute = _minute;
            }
        }
 
        public int Hour
        {
            get { return hour; }
            set { hour = value; }
        }
 
        public int Minute
        {
            get { return minute; }
            set { minute = value; }
        }
 
        public int CountMinute
        {
            get
            {
                TimeSpan t = DateTime.Now.Date.AddHours((double)hour).AddMinutes((double)minute) - DateTime.Now.Date;
                return (int)t.TotalMinutes;
            }
        }
 
        public string GetTime()
        {
            return hour + ":" + minute;
        }
 
        public bool VerificationTime(int a, int b)
        {
            if ((a < 24 && a >= 0) && (b < 60 && b >= 0))
                return true;
            else
                return false;
        }
 
        public void AddMinute(int x)
        {
            minute += x;
            if (minute / 60 > 0)
            {
                hour += minute / 60;
                minute = minute % 60;
            }
        }
    }
 
    public class Date : Time
    {
        public int year;
        public int month;
        public int day;
 
        public static bool IsLeapYear(int year)
        {
            return (year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0));
        }
 
        public int DayOfYear()
        {
            int[] MonthDays = new int[] {   0,  31,  59,  90, 120, 151,
                                        181, 212, 243, 273, 304, 334 };
            return MonthDays[month - 1] + day +
                               (month > 2 && IsLeapYear(year) ? 1 : 0);
        }
    }
}
1
17.05.2011, 14:39

Не по теме:

архитектура неправильна нельзя наследовать Дату от Тайма, наследник должен являтся родителем в логичном смысле, вы спутали has a, is a

0
 Аватар для WonderFlik
208 / 138 / 15
Регистрация: 28.04.2011
Сообщений: 389
17.05.2011, 14:52
помоему как раз чисто логически для даты и текущего времени уместнее is a если рассматривать дату как полноценную характеристику времени, а текущее время только в контексте определенного дня
0
49 / 49 / 15
Регистрация: 13.08.2010
Сообщений: 160
17.05.2011, 15:59
WonderFlik, ок ввашей модэли
дата - общая характеристика времени
время - ограниченая характеристика времени

тогда каой ответ на вопрос "общая характеристика времени" явлет собой "ограниченая характеристика времени"?

или все же вы согласитесь "ограниченая характеристика времени" часть (has a) @общая характеристика времени"
0
 Аватар для WonderFlik
208 / 138 / 15
Регистрация: 28.04.2011
Сообщений: 389
17.05.2011, 16:42
более подробный способ описания времени является описанием времени

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

Занести из файла объекты производных классов в массив объектов базового класса
Здравствуйте. Что в этом коде изменить, чтобы объекты производных классов заносились из файла? using System; namespace...

Возможно ли некоторые публичные члены базового класса закрыть для производных классов?
Т.е. чтобы некоторые члены были доступны из экземпляра базового класса, но чтобы их невозможно было вызвать из экземпляров производных?

Сортировка: Как отсортировать объекты конечных классов с учетом промежуточного базового класса?
Есть один базовый класс (ClassMain), который наследует три класса (N1 N2 N3), каждый из трех наследников наследует еще по два (N11, N12,...

Библиотека классов. Наследование обобщенного класса
Здравствуйте. Вопрос может глупый, но кроме как сюда задавать его некуда. Создать нужно библиотеку классов, реализующую структуру стекового...

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru