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

Не понимаю как базовый класс связать с дочерним

23.09.2019, 09:22. Показов 1467. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, не могу разобраться с задачей по С#

Создать базовый класс BaseString (простая строка), содержащий поля: поле для хранения символов строки, длина строки. В базовом классе описать методы: конструктор без параметров, конструктор, принимающий в качестве параметра строку, метод получения длины строки, метод очистки строки (сделать строку пустой).

Создать производный класс ComplexString (комплексная строка). Строки данного класса состоят из двух полей, разделённых знаком “i”. Первое поле задаёт значение действительной части числа, второе поле – значение мнимой части. Каждое поле может содержать десятичные цифры и знак + или –, задающие знак числа, только в первой позиции строки. Если в составе инициализирующей строки встретятся другие символы, то строка принимает пустое значение. В производном классе описать методы: конструктор, проверка на равенство двух комплексных чисел, сложение, умножение комплексных чисел.

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

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
    class BaseString
    {
        string str;
        int strLength;
 
        public BaseString()
        {
        }
 
        public BaseString(string str)
        {
            this.str = str;
            strLength = str.Length;
        }
 
        public int GetLength()
        {
            return strLength;
        }
 
        public string ClearString()
        {
            this.str = null;
            return str;
        }
    }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.09.2019, 09:22
Ответы с готовыми решениями:

typeid определяет тип указателя на базовый класс, как тип "базовый класс". Вне зависимости от присвоенного ему значения
Вот код: #include <iostream> #include <string> #include <conio.h> #include <windows.h> #include <typeinfo> using...

Класс: как обратиться к методу производного класса через итератор на базовый класс?
Есть абстрактный и два порожденных. Хочу создать например list<Base*> list1; затем добавляю себе в список: ...

Как объявить метод, который принимает любой класс являющийся дочерним от абстрактного?
Есть абстрактный класс: class Abstract { public: virtual void abst() = 0; void foo(); };

9
384 / 184 / 107
Регистрация: 07.01.2016
Сообщений: 496
23.09.2019, 10:02
Цитата Сообщение от ByrseakmV Посмотреть сообщение
как вообще базовый класс связать с дочерним
формирование наследования идет в обратную сторону (не как у людей)): потомок наследуется от родителя, тем самым перенимая его функциональность.
C#
1
2
3
public ComplexString : BaseString
{
}
0
215 / 149 / 48
Регистрация: 28.12.2016
Сообщений: 716
23.09.2019, 10:32
alexus5, всмысле? Наоборот как у людей) Потомок наследует от родителя(базового) набор генов, предрасположенность, некий функционал, а с течением времени во время развития этот набор расширяется на основе базового путем обучения и взаимодействия с окр. миром.
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16147 / 11268 / 2890
Регистрация: 21.04.2018
Сообщений: 33,131
Записей в блоге: 2
23.09.2019, 11:01
Цитата Сообщение от ByrseakmV Посмотреть сообщение
Не понимаю как базовый класс связать с дочерним
Цитата Сообщение от ByrseakmV Посмотреть сообщение
Создать производный класс ComplexString
У вас путаница в терминологии.
Под "ДОЧЕРНИМИ" понимается ВЛОЖЕННЫЕ.
Допустим, все контролы для Формы являются её дочерними элементами.

Производный класс не является дочерним.

Пример объявления дочернего класса B в родительском классе A
C#
1
2
3
4
5
6
7
8
9
10
public class ClassA
{
       class ClassB
       {
              /// Тело класса B
        }
 
        /// Тело класса A
 
}
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16147 / 11268 / 2890
Регистрация: 21.04.2018
Сообщений: 33,131
Записей в блоге: 2
23.09.2019, 11:22
Цитата Сообщение от ByrseakmV Посмотреть сообщение
Первую часть задания я сделал
У вас теряется информация в базовом классе. Вы не можете получить обратно значение поля str.
Так же у вас неправильно работает метод ClearString - он не сбрасывает длину строки и он не должен быть void.
Кроме того у вас нет метода для изменения строки.
Создав класс безпараметрическим конструктором вы не имеете возможность потом изменить нулевую строку.
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
    /// <summary>Базовый класс BaseString (простая строка)</summary>
    class BaseString
    {
        /// <summary>Защищённое поле для хранения 
        /// полученной строки</summary>
        protected string fieldStr;
        // int strLength; Лишнее поле
 
        /// <summary>Безпараметрический конструктор</summary>
        public BaseString() { }
 
        /// <summary>Конструтор с заданием значения строке</summary>
        /// <param name="str">Значение строки</param>
        public BaseString(string str)
            => fieldStr = str;
 
        /// <summary>Длина строки</summary>
        /// <returns>-1 если str=null или длину str</returns>
        public int GetLength() => fieldStr == null ? -1 : fieldStr.Length;
 
        /// <summary>Обнуление строки</summary>
        public void ClearString()
            => fieldStr = null;
 
        /// <summary>Задание нового значения строке</summary>
        /// <param name="str">Новое значчение</param>
        public void SetStr(string str)
            =>  fieldStr = str;
 
        /// <summary>Получение значения строки</summary>
        /// <returns>Значение строки</returns>
        public string GetStr() => fieldStr;
    }
0
384 / 184 / 107
Регистрация: 07.01.2016
Сообщений: 496
23.09.2019, 11:25
Defences, это понятно. обратите внимание на контекст
Цитата Сообщение от ByrseakmV Посмотреть сообщение
как вообще базовый класс связать с дочерним
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16147 / 11268 / 2890
Регистрация: 21.04.2018
Сообщений: 33,131
Записей в блоге: 2
23.09.2019, 11:26
добавлю

C#
25
26
27
28
        /// <summary>Задание нового значения строке</summary>
        /// <param name="str">Новое значчение</param>
        public virtual void SetStr(string str)
            =>  fieldStr = str;
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16147 / 11268 / 2890
Регистрация: 21.04.2018
Сообщений: 33,131
Записей в блоге: 2
23.09.2019, 11:27
Цитата Сообщение от alexus5 Посмотреть сообщение
обратите внимание на контекст
В названии темы ошибка в терминологии
0
384 / 184 / 107
Регистрация: 07.01.2016
Сообщений: 496
23.09.2019, 11:31
Элд Хасп, да, так и есть. Жизненная логика говорит о том, что код родителя должен определять потомков.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16147 / 11268 / 2890
Регистрация: 21.04.2018
Сообщений: 33,131
Записей в блоге: 2
23.09.2019, 11:52
Цитата Сообщение от ByrseakmV Посмотреть сообщение
Создать производный класс ComplexString (комплексная строка)....
Начало.
Надо по аналогии добавить остальные методы
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
    class ComplexString : BaseString
    {
        public override void SetStr(string str)
            => throw new NotImplementedException("В классе ComplexString непосредственно задать значение строке невозможно!");
 
        /// <summary>Реальная часть числа</summary>
        public double RealPart { get; }
        /// <summary>Мнимая часть числа</summary>
        public double ImaginaryPart { get; }
 
        /// <summary>Конструктор из двух чисел</summary>
        /// <param name="realPart">Реальная часть числа</param>
        /// <param name="imaginaryPart">Мнимая часть числа</param>
        public ComplexString(double realPart, double imaginaryPart)
        {
            RealPart = realPart;
            ImaginaryPart = imaginaryPart;
            fieldStr = $"{RealPart} i {ImaginaryPart}";
        }
 
        /// <summary>Конструктор из строки</summary>
        /// <param name="str">Строка с двумя числами разделёнными "i"</param>
        public ComplexString(string str)
        {
            try
            {
                string[] parts = str.ToLower().Split('i');
                RealPart = double.Parse(parts[0].Trim());
                ImaginaryPart = double.Parse(parts[1].Trim());
                fieldStr = $"{RealPart} i {ImaginaryPart}";
            }
            catch (Exception) { }
        }
 
        /// <summary>Метод сложения двух чисел</summary>
        /// <param name="left">Первое число</param>
        /// <param name="right">Второе число</param>
        /// <returns>Возвращает новое число - результат суммы.
        /// Если одно из чисел равно <see langword="null"/>, то результат тоже <see langword="null"/></returns>
        public static ComplexString Addition(ComplexString left, ComplexString right)
        {
            if (left.GetStr() == null || right.GetStr() == null)
                return new ComplexString(null);
            return new ComplexString
            (
                left.RealPart + right.RealPart,
                left.ImaginaryPart + right.ImaginaryPart
            );
        }
 
        /// <summary>Переопределение оператора сложения</summary>
        /// <param name="left">Первое число</param>
        /// <param name="right">Второе число</param>
        /// <returns>Возвращает новое число - результат суммы.
        /// Если одно из чисел равно <see langword="null"/>, то результат тоже <see langword="null"/></returns>
        public static ComplexString operator +(ComplexString left, ComplexString right)
            => Addition(left, right);
 
 
        /// Дальше другие методы.
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.09.2019, 11:52
Помогаю со студенческими работами здесь

Не понимаю, как связать это между собой максимум и минимум
Пусть А обозначает событие, что средняя температура в Москве равна 12 С, В, что средняя температура в Брянске равна 12 С. Пусть, наконец, С...

Не понимаю общего принципа. Как связать AJAX, Timer, UpdatePanel и контролы, в ней находящиеся
Суть такова. Я решил написать никому не нужный корпоративный чат, на примере которого хотел использовать наиболее оптимальные методы...

Как в функции my_function преобразовать ссылку на базовый класс в ссылку на класс B или С
Всем привет, как в функции my_function преобразовать ссылку на базовый класс в ссылку на класс B или С ? class A { public: A(); ...

Как управлять наследниками через базовый класс
Всем привет)Есть вот одна проблема. Хочу управлять объекты через другие объекты. Допустим есть базовый класс class base { ...

Как удалить объект по указателю на базовый класс?
Допустим есть несколько классов: // абстрактный класс - введен для управления наследниками class A{ ... } // рабочий класс...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru