powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / проблемы с указателем на базовый класс
7 сообщений из 7, страница 1 из 1
проблемы с указателем на базовый класс
    #33908314
OLEG_2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скажите, пожалуйста, почему не работает следующий код. Почему не доступен метод func2()?
class CObject
{
public:
virtual void func1() = 0;
};

class MyObject: public CObject
{
public:
virtual void func1()
{
}
void func2()
{
}
};

int _tmain(int argc, _TCHAR* argv[])
{
CObject* object;
object = new MyObject();
object->func1();
object->func2();

return 0;
}
...
Рейтинг: 0 / 0
проблемы с указателем на базовый класс
    #33908414
дед Макар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да потому что у CObject нет функции func2()

По идее надо было писать что-то типа

CMyObject* object;
object = new MyObject();
object->func1();
object->func2();
...
Рейтинг: 0 / 0
проблемы с указателем на базовый класс
    #33908451
OLEG_2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С помощью указателя на базовый класс разве я не могу вызывать методы дочернего класса? После строчки object = new MyObject(); по идее можно вызывать методы дочернего класса. Может быть я очень сильно торможу, но по-моему всё должно работать.
...
Рейтинг: 0 / 0
проблемы с указателем на базовый класс
    #33908491
Dmitrii K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OLEG_2005С помощью указателя на базовый класс разве я не могу вызывать методы дочернего класса? После строчки object = new MyObject(); по идее можно вызывать методы дочернего класса. Может быть я очень сильно торможу, но по-моему всё должно работать.
Для этого как раз и надо в базовом объявить виртуальную func2(), он ведь "знает" о своих потомках не более, чем о себе.
Почитай ещё разок про полиморфизм, наследование, виртуальные базовые классы...
Пару примеров:
http://www.geocities.com/mikerisan/Module17.html
http://www.cplusplus.com/doc/language/tutorial/polymorphism.html

Кроме того можно использовать *_cast для приведения указателя к нужному типу. Например:
Код: plaintext
dynamic_cast<MyObject*>(object)->func2();
...
Рейтинг: 0 / 0
проблемы с указателем на базовый класс
    #33908599
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подумайте о следующем:
взаимосвязь классов и создание объекта напоминает схему, где родительский класс является интерфейсным. Если вы действительно хотели это написать, то создайте в интерфейсе виртуальный метод, который переопределяется в реализации, то бишь в потомке.
...
Рейтинг: 0 / 0
проблемы с указателем на базовый класс
    #33908612
Хитрый Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OLEG_2005С помощью указателя на базовый класс разве я не могу вызывать методы дочернего класса? После строчки object = new MyObject(); по идее можно вызывать методы дочернего класса. Может быть я очень сильно торможу, но по-моему всё должно работать.

В данном случае к MyObject обращаешься косвенно. Суть Object *object = new MyObject(); в том чтобы отделить объект Object от его реализации в MyObject.
...
Рейтинг: 0 / 0
проблемы с указателем на базовый класс
    #33908808
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OLEG_2005......
class MyObject: public CObject
{
public:
virtual void func1()
{
}
void func2()
{
}
};
.....


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


удачи Вам
(круглый)
ЗЫ
По вопросу. Предлагаю заглянуть в книгу Джэфри Элджера "C++" - очень интересные технические решения. Ну и заодно убьёте много вопросов "почему". Хотя, я бы не назвал это "фундаментальным учением"...
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / проблемы с указателем на базовый класс
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]