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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Наследование QSqlQuery  (Прочитано 11732 раз)
SABROG
Гость
« : Июнь 14, 2007, 10:36 »

Ух до чего же я ненавижу писать классы с их подводными камнями  :evil:

Никак не получается унаследовать QSqlQuery. Хочу унаследовать так, чтобы переопределить методы exec(const QString &) и exec(), но при этом чтобы передаваемые параметры в конструктор остались такими же как и в QSqlQuery.
---
Сам разобрался.

// sabQuery.h
Код:

class sabQuery : public QSqlQuery
{
public:
        sabQuery ( QSqlResult * result ) : QSqlQuery(result) {};
        sabQuery ( const QString & query = QString(), QSqlDatabase db = QSqlDatabase() ) : QSqlQuery(query, db) {};
        sabQuery ( QSqlDatabase db ) : QSqlQuery(db) {};
        sabQuery ( const QSqlQuery & other ) : QSqlQuery(other) {};
        bool exec( const QString & );
        bool exec();
};


// sabQuery.cpp
Код:

bool sabQuery::exec(const QString &query)
{
        if (!QSqlQuery::exec(query))
        {
        qDebug(qPrintable(lastError().text()));
        return false;
        }
    return true;
}
bool sabQuery::exec()
{
        if (!QSqlQuery::exec())
        {
        qDebug(qPrintable(lastError().text()));
        return false;
        }
    return true;
}
Записан
alexis
Гость
« Ответ #1 : Июнь 14, 2007, 13:40 »

а кто тебе сазал, что ты можешь переопределять не виртуальный методы класса?
Записан
Steven_Orko
Гость
« Ответ #2 : Июнь 14, 2007, 13:49 »

Цитата: "alexis"
а кто тебе сазал, что ты можешь переопределять не виртуальный методы класса?

А кто сказал, что нет???

Другое дело, что полиморфизмом здесь не пахнет...
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #3 : Июнь 14, 2007, 14:15 »

если его объявить как virtual в наследнике, он станет виртуальным.
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Sergey B.
Программист
*****
Offline Offline

Сообщений: 544



Просмотр профиля WWW
« Ответ #4 : Июнь 14, 2007, 14:37 »

Цитата: "alexis"
а кто тебе сазал, что ты можешь переопределять не виртуальный методы класса?


Код:
class A
{
public:
     . . .
     int foo();
     . . .
};
class B : public A
{
public:
     int foo();
     void bar();
};
void
B::bar()
{
     x = foo();  
    // вызывается метод foo класса B
}

Однако метод базового класса не исчезает. Просто при поиске имени foo сначала просматриваются атрибуты и методы самого класса. Если бы имя не было найдено, начался бы просмотр имен в базовом классе, затем просмотр внешних имен. В данном случае имя foo существует в самом классе, поэтому оно и используется.

С помощью записи A::foo() можно явно указать, что нас интересует имя, определенное в классе A, и тогда запись:

x = A::foo();

вызовет метод базового класса.
Записан
SABROG
Гость
« Ответ #5 : Июнь 14, 2007, 15:38 »

Рассмотрю любые другие варианты наследования и причины выбора. Классы это больная тема для меня.
Записан
Sergey B.
Программист
*****
Offline Offline

Сообщений: 544



Просмотр профиля WWW
« Ответ #6 : Июнь 14, 2007, 15:51 »

Цитата: "SABROG"
Рассмотрю любые другие варианты наследования и причины выбора. Классы это больная тема для меня.


Рассматривай Улыбающийся
http://www.intuit.ru/department/pl/cpp/10/
Записан
SABROG
Гость
« Ответ #7 : Июнь 14, 2007, 18:22 »

Спасибо за ссылку. У меня есть книга по С++ и даже не одна. Другое дело, что я не могу никак вникнуть. Мне нужны не только примеры как должно быть, но пояснение почему это не может быть иначе на примере. А то читаю например про модификаторы const, static, volatile, register, auto и понимаю, что могу и без них свободно обойтись, т.к. по большей части они нужны, чтобы исключить ошибки программиста...

добавлено спустя 2 часа 4 минуты:

 Есть проблема, если запросов через один QSqlQuery слишком много, то в итоге я получаю:
out of memory Unable to execute statement

пришлось вставить перед exec метод clear. Тогда все нормально. Это баг такой чтоль ?
---
Похоже это не совсем баг, это проблема с SQLITEом, похоже он не хочет выделить памяти под recordset больше чем ему задал разработчик. Вот и приходится теперь после каждого запроса освобождать ресурсы...
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #8 : Июнь 14, 2007, 19:01 »

volatile, register, auto и правда нафиг не нужны... это архаизм до-ДОСовских времен.
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
SABROG
Гость
« Ответ #9 : Июнь 15, 2007, 11:23 »

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

Код:

virtual const char* foo() const = 0;
Записан
Вудруф
Гость
« Ответ #10 : Июнь 15, 2007, 11:40 »

volatile необходим для многопоточных программ с общей памятью
Записан
SABROG
Гость
« Ответ #11 : Июнь 15, 2007, 11:46 »

Тут девушка/тетенька описывает почему volatile бесполезен в многопоточных приложения: http://alenacpp.blogspot.com/2006/04/volatile.html
Записан
Steven_Orko
Гость
« Ответ #12 : Июнь 15, 2007, 15:48 »

Цитата: "SABROG"
Тут девушка/тетенька описывает почему volatile бесполезен в многопоточных приложения: http://alenacpp.blogspot.com/2006/04/volatile.html

И там же ниже ей доказывают, что она конкретно неправа...
Записан
SABROG
Гость
« Ответ #13 : Июнь 15, 2007, 16:17 »

Цитата: "Steven_Orko"
Цитата: "SABROG"
Тут девушка/тетенька описывает почему volatile бесполезен в многопоточных приложения: http://alenacpp.blogspot.com/2006/04/volatile.html

И там же ниже ей доказывают, что она конкретно неправа...


А она на это пишет, что ни одного реального примера ей так никто и не предоставил, только теория...
Записан
Steven_Orko
Гость
« Ответ #14 : Июнь 15, 2007, 17:04 »

Цитата: "SABROG"
Цитата: "Steven_Orko"
Цитата: "SABROG"
Тут девушка/тетенька описывает почему volatile бесполезен в многопоточных приложения: http://alenacpp.blogspot.com/2006/04/volatile.html

И там же ниже ей доказывают, что она конкретно неправа...


А она на это пишет, что ни одного реального примера ей так никто и не предоставил, только теория...

Ну, дык и она все в теории... Хотя там и про драйвера ей писали, и про прерывания, и про сигналы... Помоему "девочке шапка на по размеру", ИМХО.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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