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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблема с наследованием. 
V
    Опции темы
En_t_end
Дата 9.4.2006, 07:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Код

class foo_main
{
public:
virtual void func();
}

class foo_ch: public foo_main
{
public:
void func_ch(){func();};
}

class foo_2ch: public foo_ch
{
public:
void func();
}

Мне надо использовать лишь foo_2ch. Но похоже такая конструкция неверна. У самого мысла пока одна, ведь foo_ch не знает о существовании foo_2ch, в котором реализованна func, к тому же для него он последний в цепочке наследования от foo_main, то есть по сути реализовать func мне надо было в нём. Но, увы, задача такова, что должен существовать промежуточный класс с дополнительной функцией, связанно это с тем, что эта(и) функции по сути не должны быть в foo_main, они там лишнии(там работа с ОС идет, а сам foo_main лишь "шаблон" виртуальных функций(интерфейс)).

Это сообщение отредактировал(а) En_t_end - 9.4.2006, 07:16
PM MAIL ICQ Skype GTalk Jabber   Вверх
chipset
Дата 9.4.2006, 07:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Я не совсем понял вопроса. А что мешает продолжить виртуальность func в foo_ch?


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


Эксперт
****


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

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



chipset
В принципе не мешает, только вот эффекта положительного от этого нет smile
PM MAIL ICQ Skype GTalk Jabber   Вверх
np9mi7
  Дата 9.4.2006, 08:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 553
Регистрация: 17.8.2003
Где: Volgograd, Russia

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



En_t_end, а если так:
Код

class foo_main
{
public:
    virtual void func() = 0;
}
class foo_ch: public foo_main
{
public:
    void func_ch()
    {
        func();
    };
}
class foo_2ch: public foo_ch
{
public:
    virtual void func() {};
}



--------------------
"Я точно знаю то, что ничего не знаю..." Сократ.
evolution project
PM MAIL WWW ICQ MSN   Вверх
MAKCim
Дата 9.4.2006, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


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

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



Цитата

В принципе не мешает, только вот эффекта положительного от этого нет

а что конкретно надл получить в итоге?


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
En_t_end
Дата 9.4.2006, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



np9mi7
Точно... ну я плох...
ЗЫ я почему-то думал, что если реализации метода нет в базовом классе, то дочерний и не пытается вызывать его... оказавывается пытается smile
Добавлено @ 10:22
MAKCim,
Цитата(MAKCim @ 9.4.2006, 13:08 Найти цитируемый пост)
а что конкретно надл получить в итоге?

Нужно получить корректно работающий код.
Если оставить в изначальном виде, то будет увы вызываться метод из базового класса ИМХО, а он там не реализован, но компилятор об этом не знает, он пытается достать реализацию, но у него ничего не выходит и он завершает компиляцию на ошибках "unresolved external symbol %%%"
Добавлено @ 10:24
np9mi7
насколько я понимаю это правильный метод составления интерфейсов ? то есть нужно точно забраковать случай реализации метода в базовом классе ?
PM MAIL ICQ Skype GTalk Jabber   Вверх
DeadSoul
Дата 9.4.2006, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(En_t_end @ 9.4.2006, 10:18 Найти цитируемый пост)
Если оставить в изначальном виде, то будет увы вызываться метод из базового класса ИМХО, а он там не реализован, но компилятор об этом не знает, он пытается достать реализацию, но у него ничего не выходит и он завершает компиляцию на ошибках "unresolved external symbol %%%

Минимальный код вопроизводящий такую ошибку в студию.
При этом обрати внимание на изменения np9mi7.


--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
En_t_end
Дата 9.4.2006, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



DeadSoul
Код

#include "stdafx.h"

class foo_main
{
public:
virtual void func();
};

class foo_ch: public foo_main
{
public:
void func_ch(){func();};
};

class foo_2ch: public foo_ch
{
public:
void func();
};

void main()
{
foo_2ch f;
f.func_ch();
}

Добавлено @ 10:50
DeadSoul
а вообще к чему бы это ? smile
Я вроде сказал, что вопрос решился и я благодарен
np9mi7 за то что он ткнул меня носом.
PM MAIL ICQ Skype GTalk Jabber   Вверх
DeadSoul
Дата 9.4.2006, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



En_t_end, раз проблема решена, то прошу прощения(то ли ты плохо описал, то ли неверно понял)


--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
np9mi7
Дата 9.4.2006, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 553
Регистрация: 17.8.2003
Где: Volgograd, Russia

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



En_t_end, только не пытайся сделать так:
Код

class foo_main
{
public:
    virtual void func() = 0;
}
class foo_ch: public foo_main
{
public:
     foo_ch () {func_ch ();}   /// вот тут всё упадет :))
    void func_ch()
    {
        func();
    };
}
class foo_2ch: public foo_ch
{
public:
    virtual void func() {};
}



--------------------
"Я точно знаю то, что ничего не знаю..." Сократ.
evolution project
PM MAIL WWW ICQ MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.1725 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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