Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.06.2013, 12:00   #1
gvozdik12
Пользователь
 
Регистрация: 17.03.2013
Сообщений: 22
По умолчанию абстрактные классы в С#

1.Создать абстрактный класс Издание с методами позволяющим вывести на экран информацию об издании, а также определить является ли данное издание искомым.
2.Создать производные классы: Книга (название, фамилия автора, год издания, издательство), Статья (название, фамилия автора, название журнала, его номер и год издания), Электронный ресурс (название, фамилия автора, ссылка, аннотация) со своими методами вывода информации на экран.
3. Создать каталог (массив) из n изданий, вывести полную информацию из каталога, а также организовать поиск изданий по фамилии автора. Первые 2 пункта у меня получились вот код
Код:
abstract class izdanie
        
    {
        public abstract string inform();
          //  public abstract string poisk();
    }
 class kniga : izdanie
    {string name, surname,izd;
    int year;
        public kniga(string name, string surname, int year, string izd)
        {
           this.name = name;
            this.surname = surname;
            this.izd = izd;
            this.year = year;
        }
        public override string inform()
        {
            return name +" "+ surname+" " + izd +" "+ year;
        }
    }
 
 
 
class statia : izdanie
    {
        string name, aut_surname, mag_name;
        int number, year;
 
        public statia(string name, string aut_surname, string mag_name, int number, int year)
        {
            this.name = name;
            this.aut_surname = aut_surname;
            this.mag_name = mag_name;
            this.number = number;
            this.year = year;
        }
        public override string inform()
        {
            return name+" " + aut_surname+" " + mag_name+" " + number+" " + year;
        }
    }
 
 
 class email : izdanie
    {
        string name, aut_surname, annot;
 
        public email(string name, string aut_surname, string annot)
        {
 
            this.name = name;
            this.aut_surname = aut_surname;
            this.annot = annot;
        }
        public override string inform()
        {
            return name+" " + aut_surname+" "+ annot;
        }
    }
 
 
static void Main(string[] args)
        {
            izdanie q1,q2,q3;
            q1 = new kniga ("мастер и маргарита", "булгаков", 1930, "экспо");
            q2 = new statia("коллекторы", "Жуков", "физика", 3, 2011);
                q3=new email("таблицы","Меньшиков","статья");
 
            System.Console.WriteLine(q1.inform());
            System.Console.WriteLine(q2.inform());
            System.Console.WriteLine(q3.inform());
            Console.ReadKey();
        }
    }
а вот с 3 у меня проблемы... вот код
Цитата:
public static izdanie[] Find(izdanie[] publ, izdanie find)
{
izdanie [] result = new izdanie();
int count = 0;
for(int i = 0; i < publ.Length; i++)
if(find == publ[i])
{
result[count++] = publ[i];
}

return result;
}
и у меня не получается все это вместе собрать...
Цитата:
izdanie [] result = new izdanie();
в этом месте выдает ошибку неявное преобразование типов... помогите пожалуйста разобраться
gvozdik12 вне форума Ответить с цитированием
Старый 04.06.2013, 14:14   #2
gvozdik12
Пользователь
 
Регистрация: 17.03.2013
Сообщений: 22
По умолчанию

помогите пожалуйста
gvozdik12 вне форума Ответить с цитированием
Старый 04.06.2013, 14:49   #3
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Код:
izdanie [] result = new izdanie();
Завести переменную типа "книжная полка", присвоить ей значение "Тихий Дон". Стоп, что?!
Abstraction вне форума Ответить с цитированием
Старый 04.06.2013, 18:40   #4
gvozdik12
Пользователь
 
Регистрация: 17.03.2013
Сообщений: 22
По умолчанию

а как перевести из одного типа в другой тип в данном случае? или как то по-другому преобразовать? я с этой задачей туплю конкретно
gvozdik12 вне форума Ответить с цитированием
Старый 04.06.2013, 18:57   #5
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
а как перевести из одного типа в другой тип в данном случае? или как то по-другому преобразовать? я с этой задачей туплю конкретно
А надо ли преобразовывать? Чего Вы вообще хотите сделать-то? Набрать нужных объектов? Тогда нужно создать не массив, а, положим, список и туда засовывать объекты по мере обнаружения:
Код:
public static izdanie[] Find(izdanie[] publ, izdanie find)
{
  List<izdanie> result = new List<izdanie>();
  //int count = 0; - не нужен
  for(int i = 0; i < publ.Length; i++)
    if(find == publ[i])
    {
      result.Add(publ[i]);
    }

  return result.ToArray();
}
Есть ещё такой способ, если умеете обращаться с LINQ:
Код:
publ.Where(i => i==find).ToArray();
Abstraction вне форума Ответить с цитированием
Старый 04.06.2013, 20:26   #6
gvozdik12
Пользователь
 
Регистрация: 17.03.2013
Сообщений: 22
По умолчанию

я хочу создать список или массив из книг/журналов/электронных ресурсов и выполнить поиск по фамилии автора, то есть грубо говоря ввести с клавиатуры "Булгаков" к примеру, и должна появится полная информация о произведениях которые есть в каталоге. в данном случае значение переменной q1
gvozdik12 вне форума Ответить с цитированием
Старый 05.06.2013, 11:43   #7
gvozdik12
Пользователь
 
Регистрация: 17.03.2013
Сообщений: 22
По умолчанию

Цитата:
static void Main(string[] args)
{
izdanie [] q = new izdanie [4];

q[0] = new kniga("мастер и маргарита", "булгаков", 1930, "экспо");
q[1] = new statia("коллекторы", "Жуков", "физика", 3, 2011);
q[2] = new email("таблицы", "Меньшиков", "статья");

System.Console.WriteLine(q[0].inform());
System.Console.WriteLine(q[1].inform());
System.Console.WriteLine(q[2].inform());
Console.ReadKey();
// выполняет поиск книги по массиву
foreach (izdanie item in q)
{
item.inform();
Console.WriteLine();
}
}
public static izdanie[] Find(izdanie[] publ, izdanie find)
{
List<izdanie> result = new List<izdanie>();
//int count = 0; - не нужен
for(int i = 0; i < publ.Length; i++)
if(find == publ[i])
{
result.Add(publ[i]);
}

return result.ToArray();


}



}
посмотрите пожалуйста код выполняющий поиск, и поправьте пожалуйста, потому что не ищет почему то (
gvozdik12 вне форума Ответить с цитированием
Старый 05.06.2013, 12:17   #8
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Почему Вы считаете, что не ищет?
Во-первых, функция Find() нигде не вызывается.
Во-вторых, она ищет элементы массива, равные заданному.
Abstraction вне форума Ответить с цитированием
Старый 05.06.2013, 12:40   #9
gvozdik12
Пользователь
 
Регистрация: 17.03.2013
Сообщений: 22
По умолчанию

потому что, как я не пытаюсь сделать у меня не получается вывести
gvozdik12 вне форума Ответить с цитированием
Старый 05.06.2013, 12:47   #10
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
потому что, как я не пытаюсь сделать у меня не получается вывести
Первый совет: любая функция будет работать гораздо лучше, если её вызвать.
Abstraction вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Абстрактные базовые классы Millashka Помощь студентам 0 21.11.2012 15:05
Абстрактные классы aaayyy HTML и CSS 2 02.07.2012 09:54
Абстрактные классы KuckaMAXHATKA Общие вопросы C/C++ 1 13.12.2011 23:29
Абстрактные классы romantik2011 PHP 2 27.07.2011 10:36
С++ Абстрактные классы Jane-sad Помощь студентам 2 14.10.2010 14:19