Russian Qt Forum
Сентябрь 29, 2024, 18:27 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Наследование QSqlQuery  (Прочитано 11718 раз)
Insomniac
Гость
« Ответ #15 : Июнь 15, 2007, 17:15 »

Цитата: "SABROG"
Вот такое объявление увидел в классе, можете объяснить что это такое Улыбающийся ?

Код:

virtual const char* foo() const = 0;

Предполагаю, что это чисто виртуальная константная функция-член, возвращающая указатель на константу типа(ну, типа-а-а, имеющую тип) char.
О том, что она чисто виртуальная функция говорит = 0. Класс, имеющий хотя бы одну такую функцию, называется абстрактным. Экземпляр такого класса создать нельзя.
Const после foo() говорит о том, что функция-член - константная. Это означает что она может проверять состояние объекта, но не может вносить изменения. Если внутри такой функции-члена ты захочешь изменить значение какой-нибудь переменной-члена, то компилятор покажет тебе фигушку.
Собственно все.
Записан
SABROG
Гость
« Ответ #16 : Июнь 15, 2007, 18:37 »

Сложная функцию. Т.е. я не могу создать экземпляр например так ?:

Код:

MyClass vasya;


Но могу использовать ее так ?:

Код:

vasya::foo();


Неужели есть такие программисты, которые настолько параноидально огораживают свои классы барьером различных условий, дабы компилятор выдал им ошибку, типа: "забылся Василий!".
Записан
Insomniac
Гость
« Ответ #17 : Июнь 15, 2007, 19:12 »

Я полагаю, что ты должен создать наследника от этого абстрактного класса, в котором определишь эту функцию.
Пример.
    Ты - Бог и решил заселить мир жЫвотными. Ты решаешь, что каждое жЫвотное может жрать, спать и срать, и создаешь общий для всех класс "жЫвотное".
    НО! Каждое создание божье это делает по своему. С другой стороны если ты создашь экземпляр такого "жЫвотного", которое жрет, спит и все остальное делает неизвесно как, то это будет фильм ужасов, а не заселенный мир. Поэтому ты, о мудрый создатель, обзываешь все эти методы чисто виртуальными.
   Теперь ты создаешь новые классы "мышь" и "кошь", наследуя их от "жЫвотного", и у них определяешь эти методы - для каждого по-своему.
Короче, если я правильно понял, то абстрактные классы - это путь к полиморфизму.
Записан
SABROG
Гость
« Ответ #18 : Июнь 15, 2007, 21:16 »

А зачем мне нужны вообще эти виртуальные методы, которые надо переопределять, если кто-то другой сам может ввести новые методы на "посрать", "поспать" и еще чего-нибудь. А то глядишь "кошь" родится с генетическими отклонениями и не сможет "посрать" и через какое-то время умрет от интоксикации, к примеру.
Записан
Insomniac
Гость
« Ответ #19 : Июнь 15, 2007, 21:55 »

Цитата: "SABROG"

...
 А то глядишь "кошь" родится с генетическими отклонениями и не сможет "посрать" и через какое-то время умрет от интоксикации, к примеру.

Естественный отбор  Улыбающийся.
А вообще С++, как и Россию - умом не понять. Он слишком объемен, чтобы прочитать книгу и сказать:"О! мне все ясно! Пойду спать."
У меня несколько книг, бумажных и электронных, и я периодически их читаю и пытаюсь понять.
Проблема в том, что приведенные в книгах примеры предназначены только для демонстрации техники программирования, поэтому смотря на них думаешь: "Какого... такую простую вещь делать с таким сложностями". Все эти заморочки проявляют себя в больших проектах. И есть примеры, как надо и как не надо программировать на С++ с использованием объектного программирования.
Пример, как надо использовать С++ - догадайся с первого раза.
Правильно - Qt.
Как не надо - MFC.
Предупреждаю сразу - это ИМХО Крутой , а не призыв к Халивару, поэтому спорить на тему, кто из них лучше, категорически не буду.
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.097 секунд. Запросов: 21.