Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Наследование классов 
:(
    Опции темы
chipset
Дата 3.4.2005, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: 27
Всего: 165



Припиши "{}" к функции doit класса object.
Вот так:
Код

class objectt {
public:
    objectt(systemm<objectt> * const _owner) : owner(_owner){}
    ~objectt(){}
    virtual void doit(){};
protected:
    const systemm<objectt> *owner;
};



--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
pablo
Дата 4.4.2005, 08:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 12.2.2005
Где: Вильнюс, Литва

Репутация: 4
Всего: 6



Параметры "отца" при наследовании указываются после двоеточия через запятую при создании "сына" обычно в констрыкторе по умолчанию(default constructor). Не надо сдесь юзать шаблонов, они только вводят в заблуждение и не отражают суть наследования.


--------------------
Первый блин всегда похож на сферу, иногда бывает и куб.
PM MAIL ICQ   Вверх
chipset
Дата 4.4.2005, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: 27
Всего: 165



Цитата(pablo @ 3.4.2005, 22:11)
Параметры "отца" при наследовании указываются после двоеточия через запятую при создании "сына" обычно в констрыкторе по умолчанию(default constructor).

Прочитай ещё раз вопрос. uvsoft'у нужно имя типа который нужен создавать, эдакий паттерн "фабрика".


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
pablo
Дата 4.4.2005, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 12.2.2005
Где: Вильнюс, Литва

Репутация: 4
Всего: 6



ааааааа, сорри за офтопик. smile


--------------------
Первый блин всегда похож на сферу, иногда бывает и куб.
PM MAIL ICQ   Вверх
maxim1000
Дата 4.4.2005, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



Цитата
эдакий паттерн "фабрика".

ну и в чем проблема его создать?
Код

class Object
{
  static Object *CreateNew()
  {
    return new Object;
  }
}

в наследниках тоже реализуется такая функция, только создавать она будет объекты нужных классов
а в конструктор SYSTEM передавать адрес создающей функции...


--------------------
qqq
PM WWW   Вверх
uvsoft
Дата 4.4.2005, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 123
Регистрация: 4.2.2003

Репутация: нет
Всего: нет



maxim1000 я бы может так и сделал, чтобы не мучаться с шаблонами, но:
Цитата
только SYSTEM знает какие именно параметры нужно передавать в конструктор OBJECT, то есть в SYSTEM инкапулирована какая-нить инфа, необходимая для создания OBJECT, например, он передает указательно на себя (на владельца), какие-то начальные параметры, зависящие от текущего состояния SYSTEM

--------------------
Старый глюк лучше новых двух.
PM MAIL ICQ   Вверх
chipset
Дата 5.4.2005, 01:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: 27
Всего: 165



uvsoft, так чем мой вариант не подходит?


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Vyacheslav
Дата 5.4.2005, 07:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



Паттерны Фабрика классов, Виртуальный конструктор
Одно из решений на pure C++
http://forum.vingrad.ru/index.php?showtopi...indpost&p=60738


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
maxim1000
Дата 5.4.2005, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



Цитата
только SYSTEM знает какие именно параметры нужно передавать в конструктор OBJECT

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


--------------------
qqq
PM WWW   Вверх
EvgenZ
Дата 16.1.2007, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Freedom in me
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 3.8.2006

Репутация: 1
Всего: 11



Всем привет, а как можно сделать виртуальный конструктор в абстрактном классе
Код

#include <iostream>

class Point{
public:
    Point(): mX(0.0), mY(0.0){}
    Point(float x,float y): mX(x), mY(y){}
    virtual ~Point(){}
    virtual Point* clone()const {return new Point;}
    friend std::ostream& operator<< (std::ostream&, const Point&) ;
protected:
    virtual void Print(std::ostream&) const;
    float mX;
    float mY;
};

std::ostream& operator<< (std::ostream& out, const Point& p) {
    p.Print(out);
    return out;
}

void Point::Print(std::ostream& out) const {
    out << "X= " << mX << "  Y= " << mY;
}


class Krug: public Point{
public:
    Krug(): Point(0.0, 0.0), mRad(0.0){}
    Krug(float x, float y, float rad): Point(x, y), mRad(rad){}
    ~Krug(){}
    Krug* clone()const {return new(Krug);}
protected:
    float mRad;
    void Print(std::ostream&) const;
};

void Krug::Print(std::ostream& out) const{
    Point::Print(out);
    out << "\nradius= " << mRad;
}

class Kvadrat: public Point{
public:
    Kvadrat(): Point(0.0, 0.0), mShir(0.0), mDlinna(0.0){}
    Kvadrat(float x, float y, float dl, float sh): Point(x, y), mShir(sh), mDlinna(dl){}
    ~Kvadrat(){}
    Kvadrat* clone()const {return new(Kvadrat);}
protected:
    void Print(std::ostream&) const;
    float mShir;
    float mDlinna;
};

void Kvadrat::Print(std::ostream& out) const{
    Point::Print(out);
    out << "\nShirina= " << mShir << "  Dlinna= " << mDlinna << std::endl;
}


int main(){
    Krug a(1,2,3);
    std::cout << a;
    return 0;
}


как сделать, если класс Point сделать абстрактным?


--------------------
<удалено администрацией форума>
PM MAIL   Вверх
Daevaorn
Дата 16.1.2007, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(EvgenZ @  16.1.2007,  12:52 Найти цитируемый пост)
 сделать виртуальный конструктор в абстрактном классе

Виртуальных конструкторов чистом виде не бывает. Бъясни что ты хочешь сделать.
PM MAIL WWW   Вверх
EvgenZ
Дата 16.1.2007, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Freedom in me
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 3.8.2006

Репутация: 1
Всего: 11



Надо сделать виртуальные конструкторы

как-то так:

Цитата

Разработать и реализовать класс "множество" элементы которого содержат порядковые номера элементов и указатель на экземпляр класса "прямоугольник" или "окружность". Память под элементы выделяеться статически.
Для класса множества предусмотреть необходимые конструкторы, включение нового элемента (с помощью перегруженного оператора +=, в множество включаеться копия аргумента, считаеться что все элементы множества различные ) и вывод множества в поток (с помощью перегруженного оператора << ).
Окружность задаеться координатами центра и радиусом (тип float). Прямоугольник задаеться координатами левого верхнего и сторонами - длинна и ширина(тип float).
Для классов "прямоугольник" и "окружность" предусмотреть необходимые конструкторы и виртуальные методы создающии копии и выводящии в поток (с использованием перегруженного оператора <<).
Привести примеры использования разработанного класса.


я думал сделать static Point* clone(){return new Point}
                           static Point* clone(){return new Krug}
                           static Point* clone(){return new Kvadrat}
но что-то не заладилось )))


--------------------
<удалено администрацией форума>
PM MAIL   Вверх
EvgenZ
Дата 17.1.2007, 00:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Freedom in me
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 3.8.2006

Репутация: 1
Всего: 11



ап


--------------------
<удалено администрацией форума>
PM MAIL   Вверх
Daevaorn
Дата 17.1.2007, 00:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(EvgenZ @  16.1.2007,  13:44 Найти цитируемый пост)
но что-то не заладилось ))) 

что именно? идея у тебя правильная
PM MAIL WWW   Вверх
EvgenZ
Дата 17.1.2007, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Freedom in me
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 3.8.2006

Репутация: 1
Всего: 11



Daevaorn, значит можно только так? Без virtual ? Я подумал, что можно сделать по другому...


--------------------
<удалено администрацией форума>
PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0578 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.