|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
12.11.2011, 22:24 | #1 |
Форумчанин
Регистрация: 24.02.2009
Сообщений: 269
|
c++ virtual function
Здравствуйте уважаемые форумчанины.....
Возник такой вопрос... Есть у меня класс с некоторыми методами. Эти методы мне надо сделать виртуальными. В одной из книг сказано, что нужно сделать через наследование и написать класс, который будет управлять базовым... Скажите пожалуйста обязательно ли делать дочерний класс для управления базового и как тогда в этом случаи переопределять виртуальные методы??? Заранее спасибо. |
12.11.2011, 23:59 | #2 |
Участник клуба
Регистрация: 23.12.2010
Сообщений: 1,129
|
Не обязательно, конечно. Нужно делать так, как эффективнее с точки зрения планируемой архитектуры.
Если виртуальный метод реализуется только в дочернем классе - базовый класс называют абстрактным. Но никто так делать не заставляет, очевидно. |
13.11.2011, 00:22 | #3 |
Форумчанин
Регистрация: 24.02.2009
Сообщений: 269
|
аааа.... у меня уж мозг плавиться. я не понимаю...(((
Son Of Pain у меня есть класс в котором реализованы методы... Как мне превратить их в виртуальные.... Если я переопределяю эти методы в дочерним классе, то что я должен там писать???? Последний раз редактировалось world12_tk; 13.11.2011 в 00:29. |
13.11.2011, 00:32 | #4 |
Участник клуба
Регистрация: 23.12.2010
Сообщений: 1,129
|
В родительском классе писать перед возвращаемым типом слово virtual.
В дочерних классах можно тоже писать virtual, а можно ничего не писать - компилятор поймет сам. |
13.11.2011, 00:47 | #5 |
Форумчанин
Регистрация: 24.02.2009
Сообщений: 269
|
тогда такой вопрос....
вот мой класс: Код:
Если я делаю виртуальным метод Print, то его должен переопределить в дочернем классе? Как тогда будет выглядеть дочерний класс? |
13.11.2011, 00:54 | #6 |
Участник клуба
Регистрация: 23.12.2010
Сообщений: 1,129
|
Не "должен", а "можешь". Можешь переопределить, можешь не переопределить, можешь переопределить в дочернем классе дочернего - как душе угодно.
А выглядеть будет обычно - Код:
|
13.11.2011, 01:05 | #7 |
Форумчанин
Регистрация: 24.02.2009
Сообщений: 269
|
ага..... эт значит, когда я буду вызывать в объекте child метод Print, то он вызывется из базового????
а для чего это вообще нужно? |
13.11.2011, 02:04 | #8 |
Участник клуба
Регистрация: 23.12.2010
Сообщений: 1,129
|
Гм. Это называется 'полиморфизм', и является одним из базовых понятий ооп. Я могу объяснить на пальцах, конечно, но лучше возьми любую хорошую книжку, там все это будет расписано намного лучше.
Например у тебя есть класс 'геометрическая фигура'. В нем есть виртуальный метод draw. От него наследуются классы 'круг', 'квадрат', 'треугольник' и т.д. Очевидно, что все они будут переопределять метод draw - ведь фигуры рисуются по-разному. И полиморфизм позволяет тебе хранить указатели на любые фигуры в одном массиве, и вызывать правильный метод не зная, какая фигура на самом деле там. |
13.11.2011, 12:02 | #9 | |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,708
|
Цитата:
если через укзатель на базовый, то метод того класса, который реально там |
|
13.11.2011, 15:13 | #10 |
Форумчанин
Регистрация: 24.02.2009
Сообщений: 269
|
Спасибочки... начал хоть что то понимать...
Вот такой вопросик еще: Написал я заголовок дочернего класса в новом файле, компилятор выдает ошибку Expression syntax в строчке конструктора. Не могли бы вы мне объяснить почему? Код:
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Mac OS на Virtual PC | unbanned | Свободное общение | 3 | 27.06.2011 19:08 |
Abstract, Virtual, ... | ImmortalAlexSan | Общие вопросы Delphi | 3 | 15.08.2010 14:53 |
Не работает virtual | Syltan | Общие вопросы C/C++ | 4 | 14.06.2010 16:44 |
Virtual machines | Elm0 | Свободное общение | 0 | 03.02.2008 21:06 |
Virtual Bus | RoadTrain | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 0 | 17.09.2007 01:48 |