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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2012, 03:49   #1
Frants
Пользователь
 
Регистрация: 12.01.2012
Сообщений: 19
По умолчанию Не могу разобраться с заданием

Вот условие:

Цитата:
1.Опишите абстрактный класс (обозначим его А) и два его потомка. Используйте произвольные, но реальные объекты. Опишите в классе абстрактный метод, возвращающий значение базового (примитивного) типа.

2.Напишите класс, который будет читать данные из файла о коллекции объектов типа А определенного в пункте 1.
Т.е. в первом пункте нужно описать базовый класс с чистой виртуальной функцией (чтобы базовый класс стал абстрактным), и эта функция будет возвращать значение базового класса, так?

Например:
Код:
class Car
{
    protected:
        string model;
    public:
        Car return_model() = 0;
};

class Honda : public Car
{
...
};

class Ford : public Car
{
...
};
Метод return_model() будет возвращать значение model, заданное при инициализации объектов класса Honda или Ford. На этом первый пункт можно считать сделанным?

А второй пункт как делать? Ну создам я класс, создам в этом классе метод, который будет открывать определенный файл и читать из него информацию. А дальше что? Вывести на экран прочитанное? Для этого и класс создавать не особо нужно...
Frants вне форума Ответить с цитированием
Старый 12.12.2012, 09:21   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Опишите в классе абстрактный метод, возвращающий значение базового (примитивного) типа.
Если я правильно понял нужно описать функцию, которая бы возвращала результат типа класса-предка. Т.е. Функция Car Auto() в классах Хонды и форда должна вернуть класс Car.
Цитата:
Для этого и класс создавать не особо нужно.
В рамках обучения... Ну создай ты класс со статической функцией считывания и не парься. А может быть требуется не просто считывание, а еще и формировании списков объектов классов-наследников.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.12.2012, 16:34   #3
Frants
Пользователь
 
Регистрация: 12.01.2012
Сообщений: 19
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Если я правильно понял нужно описать функцию, которая бы возвращала результат типа класса-предка. Т.е. Функция Car Auto() в классах Хонды и форда должна вернуть класс Car.
В С++ нельзя создавать объекты абстрактного класса, и, соответственно, возвращать тип такого класса, так как это подразумевает создание объекта абстрактного класса. Пробовал, ошибку выдает при создании функции, возвращающей объект класса Car.

В задании, которое я делаю, не указывается какой-то конкретный язык программирования. Быть может, в Java, C# или еще где можно создать и вернуть объект абстрактного базового класса, но не в С++... В задании этого могли не учесть.

Я еще нуб в программировании, могу ошибаться.
Frants вне форума Ответить с цитированием
Старый 12.12.2012, 16:54   #4
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
По умолчанию

вобще то в с++ есть абсттрактные классы... вот только напрямую с ними общаться никак...

класс в котором есть метод
Код:
void func() = 0; // такого фасона
говорит компилятору о том, что этот класс не полный но в будущем его дети... это допишут....

возвратить предка можно преобразовав сына или внука в класс предка..
допустим...

(Predok*)vnuk;

//-----

фишка в том что память под класс у них будет одинаковая... но то что дети там накалякали
этого не будет... просто как бы дед.. меньше по sizeof
Если помог, тут весы есть , Вам не сложно, а мне приятно.

Последний раз редактировалось Perchik71; 12.12.2012 в 16:56. Причина: дописал
Perchik71 вне форума Ответить с цитированием
Старый 12.12.2012, 17:02   #5
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
По умолчанию

Код:
class Car
{
    protected:
        string model;
    public:
        Car* return_model() = 0;
};

class Honda : public Car
{
public:
        Car* return_model() { return (Car*)this; }
};
и да... возвращай всегда указатель... ибо так будет быстрее..
не вызываются всякие конструкторы итп...
Если помог, тут весы есть , Вам не сложно, а мне приятно.
Perchik71 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу справиться с заданием! жук13 Помощь студентам 7 28.05.2012 14:01
НЕ МОГУ СПРАВИТЬСЯ С ЗАДАНИЕМ tanya-ay Помощь студентам 2 18.02.2011 07:49
помогите разобраться с заданием лабораторной работы tiger Помощь студентам 2 26.09.2009 00:38
Не могу разобраться с заданием. Graf Xandr Помощь студентам 4 10.05.2009 19:42