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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запретить наследование 
:(
    Опции темы
Fedor
Дата 17.6.2007, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Днепрянин
****


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

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



Не нашел такой темы...

как в с++ запретить наследование класса? 
в .net эта штука, насколько я понимаю называется sealed. А как здесь?

Это сообщение отредактировал(а) Fedor - 17.6.2007, 12:26


--------------------
Мы - Днепряне. Мы всех сильней.
PM ICQ   Вверх
Daevaorn
Дата 17.6.2007, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Fedor @  17.6.2007,  13:25 Найти цитируемый пост)
А как здесь?

сделать конструкторы private. А для создания объекта написать "фабричный метод"
PM MAIL WWW   Вверх
Fedor
Дата 17.6.2007, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Днепрянин
****


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

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



Цитата(Daevaorn @  17.6.2007,  12:31 Найти цитируемый пост)
 А для создания объекта написать "фабричный метод"

типа
Код

A* A::Create()
{}

??

Добавлено через 4 минуты и 3 секунды
Хотя так не пойдет... В общем, как это фабричный метод? )


--------------------
Мы - Днепряне. Мы всех сильней.
PM ICQ   Вверх
Xenon
Дата 17.6.2007, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Я понимаю так.
Код

class Foo
{
private:
    int m_var;
    Foo(int var = 0):m_var(var){}
public:
    static Foo* create_Foo(int var = 0)
    {
        return new Foo(var);
    }
};
int main(int argc, char* argv[]) 
{
    Foo* obj = Foo::create_Foo(10);
    delete obj;
    std::cin.sync();
    std::cin.get();
    return 0;
}


Добавлено через 1 минуту и 53 секунды
Ну или так:
Код

class Foo
{
private:
    int m_var;
    Foo(int var = 0):m_var(var){}
public:
    friend Foo* create_Foo(int var);
};

Foo* create_Foo(int var = 0)
{
    return new Foo(var);
}

int main(int argc, char* argv[]) 
{
    Foo* obj = create_Foo(10);
    delete obj;
    std::cin.sync();
    std::cin.get();
    return 0;
}




--------------------
user posted image  
PM MAIL   Вверх
Feniksa
Дата 17.6.2007, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Fedor,  а какой компилятор используеш?  smile  В зависимости от компилятора, можно директивами заставить не наследовать класс... Всё зависит от компилятора (и его версии)  smile 
PM MAIL   Вверх
Damarus
Дата 17.6.2007, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 671
Регистрация: 6.5.2006

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



Цитата(Feniksa @  17.6.2007,  13:45 Найти цитируемый пост)
В зависимости от компилятора, можно директивами заставить не наследовать класс...

 smile  smile 
PM MAIL ICQ Jabber   Вверх
Xenon
Дата 17.6.2007, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Если комилятор для C#, то можно приписать sealed?  smile 


--------------------
user posted image  
PM MAIL   Вверх
Damarus
Дата 17.6.2007, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 671
Регистрация: 6.5.2006

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



Цитата(Xenon @  17.6.2007,  14:18 Найти цитируемый пост)
Если комилятор для C#, то можно приписать sealed?

Ну, так не интересно. Если тема в разделе C++, то и компиляторы должны быть для С++. 
PM MAIL ICQ Jabber   Вверх
Xenon
Дата 17.6.2007, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Damarus, ну это был риторический вопрос автору идеи smile


--------------------
user posted image  
PM MAIL   Вверх
Fin
Дата 17.6.2007, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


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

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



Вопрос на засыпку: Назовите внятную и вескую причину, Зачем нужно запрешать наследование? Тем самым нарушая основной принцип ООП.


--------------------
Пролетал мимо.
PM MAIL   Вверх
Xenon
Дата 17.6.2007, 16:14 (ссылка) |   (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Fin, какой принцип? Где написано, что все классы должны иметь способность к классическому наследованию?

Это сообщение отредактировал(а) Xenon - 17.6.2007, 16:15


--------------------
user posted image  
PM MAIL   Вверх
Fin
Дата 17.6.2007, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


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

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



Xenon, Открой любой учебник, где хотя бы краем упоминается Объектно Оринтированное Программирование. Там обязательно будут упоменены три кита ООП: инкапсуляция, наследование и полиморфизм.


--------------------
Пролетал мимо.
PM MAIL   Вверх
skyboy
Дата 17.6.2007, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


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

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



Fin, давай без фанатизма, а? то, что аксиоматическим началом эвклидовой геометрии является непересекаемость параллельных прямых вовсе не означает, что все прямые должны быть параллельны  smile 
PM MAIL   Вверх
Fin
Дата 17.6.2007, 17:58 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


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

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



Ну я так и не услышал причину? Или запретить ради запрешения smile В принципе на С++ я знаю как обойти данное закрытие наследования. Нужен только большой бубен и полчаса работы.


--------------------
Пролетал мимо.
PM MAIL   Вверх
Xenon
Дата 17.6.2007, 18:04 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Fin, открыл, ну и? Да, согласен, в ООП есть и инкапсуляция и полиморфизм и наследование ... Что, я теперь в каждом классе должен все функции помечать как virtual, приватные члены делать защищенными? А, ну тогда еще нельзя использовать friend, так как друзья - палки в колеса настоящему ООП.
Свою очередь могу посоветовать открыть Страуструпа на 23 главе "Разработка и проектирование"


--------------------
user posted image  
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.0633 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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