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

Создать конструкторы для класса

08.01.2015, 20:39. Показов 1281. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Уважаемые форумчане! Нужна помощь с реализацией конструкторов для класса. Заранее спасибо за любую помощь!
Задан класс:
Код:

C#
1
2
3
4
class MString
{
    char[] chars;
}

(здесь поле char[] chars обязательно не открытое)
1. Добавить конструктор, создающий объект из участка обычной строки, с тремя параметрами:
исходная строка, начальный индекс, конечный индекс (конечный индекс на единицу больше, чем индекс последнего символа).MString(string ms, int start, int finish). Два последних параметра не обязательны.

2. Добавить конструктор, создающий объект из участка MString. public MString(MString ms, int start, int finish)

первый конструктор:
C#
1
2
3
public MString(string ms, int start, int finish)
{
}
второй конструктор:
C#
1
2
3
public MString(MString ms, int start, int finish) 
{
}
Добавлено через 8 минут
Первый конструктор написал так, а второй не получается написать

C#
1
2
3
4
5
6
7
public MString(string ms, int start = 0, int finish = int.MaxValue)
{
    chars = ms.ToCharArray();
    char[] c = new char[ms.Length];
    Array.Copy(chars, c, finish - start);
    chars = c;
}
если это неправильно, подскажите пожалуйста как исправить
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.01.2015, 20:39
Ответы с готовыми решениями:

Конструкторы класса, наследование
Доброго времени суток, форумчане! Создал класс и несколько производных от него. В некоторых классах (circle, rectangle) появилась...

Некорректно работают конструкторы класса
Суть задания. Определите иерархию классов (точка-круг-конус), связанных отношением наследования. Определите в этих классах методы,...

Стоит ли объявлять конструкторы абстрактного класса с модификатором доступа protected?
1. Стоит ли объявлять конструкторы абстрактного класса с модификатором доступа protected? ReSharper подсказывает что стоит, не могу понять...

6
9 / 9 / 8
Регистрация: 25.12.2011
Сообщений: 44
08.01.2015, 21:17
2)
C#
1
2
3
4
5
public MString(MString ms, int start, int finish)
        {
            chars = new char[ms.chars.Length];
            Array.ConstrainedCopy(ms.chars,start, chars, 0, finish - start+1);
}
Пробуй так. Или
C#
1
2
3
4
5
6
7
8
public MString(MString ms, int start, int finish)
        {
            chars = new char[ms.chars.Length];
            for (int i = start, j = 0; i <= finish; i++, j++)
            {
                chars[j] = ms.chars[i];
            }
        }
Добавлено через 58 секунд
Может конечно ошибаюсь, просто слегка недопонимаю задание)
1
0 / 0 / 0
Регистрация: 07.01.2015
Сообщений: 8
08.01.2015, 21:25  [ТС]
К сожалению не получилось. Вот такая ошибка: Unhandled Exception: System.ArgumentException: Source array was not long enough. Check srcIndex and length, and the array's lower bounds.
at System.Array.Copy(Array sourceArray, Int32 sourceIndex, Array destinationArray, Int32 destinationIndex, Int32 length, Boolean reliable)
at System.Array.Copy(Array sourceArray, Array destinationArray, Int32 length)
at MString..ctor(String ms, Int32 start, Int32 finish)
at Program.Main()

Эту задачу проверяет программа, и она выдала сейчас то, что я выше написал. Но все равно спасибо!
0
9 / 9 / 8
Регистрация: 25.12.2011
Сообщений: 44
08.01.2015, 21:40
А как Вы инициализируете его в Main?
Вот так оно работает:
C#
1
2
3
4
5
6
char[] s4 = {'a','b','g','y','v','j','1','2','3'};
            MString s1 = new MString(s4);
            MString s = new MString(s1, 1, 5);
            char[] g = s.chars;
            for(int i = 0; i < g.Length; i++)
                Console.Write(g[i] + " ");
Но кстати, попробуйте вместо
C#
1
 Array.ConstrainedCopy(ms.chars,start, chars, 0, finish - start+1);
вставить
C#
1
 Array.Copy(ms.chars,start, chars, 0, finish - start+1);
Добавлено через 3 минуты
Почему сделано так
C#
1
2
3
4
5
MString s1 = new MString(s4);
            MString s = new MString(s1, 1, 5);
            char[] g = s.chars;
            for(int i = 0; i < g.Length; i++)
                Console.Write(g[i] + " ");
Потому что конструктор
C#
1
MString(MString ms, int start, int finish)
является конструктором копирования. И для начала, необходимо создать объект класса MString, чтобы потом скопировать определенный диапазон его chars в другой объект класса MString. Вроде понятно объяснил
1
Заблокирован
08.01.2015, 21:41
polant, попробуйте так:
C#
1
2
3
4
5
6
7
8
            public MString(string ms, int start, int finish)
            {
                if (finish <= ms.Length)
                    chars = ms.Substring(start, finish - start).ToCharArray();
                else throw new ArgumentException("finish > length");
            }
            public MString(MString ms, int start, int finish)
                : this(new string(ms.chars), start, finish) { }
1
0 / 0 / 0
Регистрация: 07.01.2015
Сообщений: 8
08.01.2015, 22:35  [ТС]
C#
1
Array.Copy(ms.chars,start, chars, 0, finish - start+1);
вставил это, но выдает все ту же ошибку

Добавлено через 9 минут
При тесте программа попадается на ваше исключение
Unhandled Exception: System.ArgumentException: finish > length
at MString..ctor(String ms, Int32 start, Int32 finish)
at Program.Main()

А если написать без строчки кода с созданием исключения, то просто wrong пишет.
Возможно дело в том, что поле char[] chars - не открытое (:this(new string(ms.chars), start, finish)), а здесь идет обращение к нему, и по-этому не принимается задача.

Скажу, что правильность написанной программы проверяю не я сам в Visual Studio, а другая программа(там есть задачи так сказать "для тренировки навыков что ли"), в которой и задана эта задача - она тестирует то, что я написал, проверяет соответствие условию и т.д

Добавлено через 9 минут
Цитата Сообщение от polant Посмотреть сообщение
Два последних параметра не обязательны
тут я имел в виду, что их похоже надо объявить как-то так: (string ms, int start = 0, int finish = int.MaxValue)
Хотя это вряд ли меняет суть задачи.
0
0 / 0 / 0
Регистрация: 07.01.2015
Сообщений: 8
11.01.2015, 18:10  [ТС]
Получилось вот такое вот решение.
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
    
    class MString
    {
        private char[] chars;
 
        public char[] Chars
        {
            get { return chars; }
            set { chars = value; }
        }
 
        public MString(string ms, int start = 0, int finish = 0)
        {
            if (finish == 0)
            {
                finish = ms.Length;
            }
            char[] ch = ms.ToCharArray();
            int length = finish - start;
            chars = new char[length];
            Array.Copy(ch, start, chars, 0, finish - start);
        }
 
 
        public MString(MString ms, int start = 0, int finish = 0)
        {
            if (finish == 0)
            {
                finish = ms.Chars.Length;
            }
            int length = finish - start;
            chars = new char[length];
            Array.Copy(ms.Chars, start, chars, 0, length);
        }
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.01.2015, 18:10
Помогаю со студенческими работами здесь

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

Создать событие для объекта класса
Доброго времени суток! Предположим, что существует класс, назовём его MyClass. Я добавляю в список List&lt;MyClass&gt; MyList объекты этого...

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

Создать экземпляр класса Graphics для метода в своём классе
Всем привет.Делаю графический редактор,нужно,чтобы отрисовывались на контроле picturebox линии из списка lines.Для этого создал класс...

Создать класс для работы с датой. Разработать следующие элементы класса
Можно полный код для запуска программы? Создать класс для работы с датой. Разработать следующие элементы класса: a. Поле DataTime data....


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru