Форум программистов, компьютерный форум CyberForum.ru

Наследование, конструктор класса - C++

Восстановить пароль Регистрация
 
Xantrax
16 / 16 / 1
Регистрация: 28.11.2012
Сообщений: 328
26.04.2013, 00:53     Наследование, конструктор класса #1
Объясните мне пожалуйста, что значит такая конструкция:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class CMyPaintDC:public CPaintDC
{
public:
    CMyPaintDC(CWnd* pWnd = NULL); /* - объявление конструктора класса по умолчанию. Зачем ему в параметры передается указатель на тип  CWnd?*/
    void DrawCross(int PosX, int PosY);
};
CMyPaintDC::CMyPaintDC(CWnd* pWnd)
            :CPaintDC(pWnd) /* - определение конструктора класса, мне не понятно, что такое :CPaintDC(pWnd)*/
{}
Или вот еще:
Widget(QWidget *parent = 0); /*Объявление конструктора, зачем в параметры передается указатель на тип QWidget?*/
Widget::Widget(QWidget *parent)
    : QWidget(parent) //Определение конструктора, аналогичные непонятки
Объясните пожалуйста, что тут зачем?
Спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
26.04.2013, 01:05     Наследование, конструктор класса #2
Цитата Сообщение от Xantrax Посмотреть сообщение
/*Объявление конструктора, зачем в параметры передается указатель на тип QWidget?*/
созданный виджет будет жить до тех пор пока живет его родитель, подробнее тут

Цитата Сообщение от Xantrax Посмотреть сообщение
/* - объявление конструктора класса по умолчанию. Зачем ему в параметры передается указатель на тип CWnd? */
в MFC не силен, но вероятно для тех же целей

Добавлено через 44 секунды
Цитата Сообщение от Xantrax Посмотреть сообщение
/* - определение конструктора класса, мне не понятно, что такое :CPaintDC(pWnd)*/
Цитата Сообщение от Xantrax Посмотреть сообщение
: QWidget(parent) //Определение конструктора, аналогичные непонятки
это список инициализации конструктора, а если конкретнее то вызов конструктора базового класса
Xantrax
16 / 16 / 1
Регистрация: 28.11.2012
Сообщений: 328
26.04.2013, 01:15  [ТС]     Наследование, конструктор класса #3
созданный виджет будет жить до тех пор пока живет его родитель
C++
1
class CMyPaintDC:public CPaintDC
родителем для данного класса является CPaintDС, почему же в параметрах конструктора указывается CWnd?
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
26.04.2013, 01:18     Наследование, конструктор класса #4
Цитата Сообщение от Xantrax Посмотреть сообщение
Цитата Сообщение от Jupiter Посмотреть сообщение
созданный виджет будет жить до тех пор пока живет его родитель, подробнее тут
C++
1
class CMyPaintDC:public CPaintDC
родителем для данного класса является CPaintDС, почему же в параметрах конструктора указывается CWnd?
я говорил о Qt, повторюсь в MFC не силен, но по логике контекст рисования должен принадлежать окну, нельзя просто так создать контекст в отрыве от окна
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
26.04.2013, 12:22     Наследование, конструктор класса #5
Цитата Сообщение от Xantrax Посмотреть сообщение
родителем для данного класса является CPaintDС,
Вероятно тут возникла путаница. Родитель - как базовый класс, и родитель - как контейнер в котором содержится виджет.
Xantrax
16 / 16 / 1
Регистрация: 28.11.2012
Сообщений: 328
26.04.2013, 12:49  [ТС]     Наследование, конструктор класса #6
Цитата Сообщение от Tulosba Посмотреть сообщение
Вероятно тут возникла путаница. Родитель - как базовый класс, и родитель - как контейнер в котором содержится виджет.
Да, на самом деле в конструктор нужно передавать указатель на объект класса, от которого наследовано окно в котором я хочу рисовать, в моем случае можно указывать:
C++
1
2
3
4
5
6
class CMyPaintDC:public CPaintDC
{
public:
    CMyPaintDC(CDialog* a); [B][COLOR="Blue"]//или[/COLOR][/B]
    CMyPaintDC(CWnd* a); [B][COLOR="Blue"]//а может и вообще CObject?[/COLOR][/B]
};
Ну, а определение конструктора Должно соответственно выглядеть так:
C++
1
2
3
CMyPaintDC::CMyPaintDC(CDialog* a):CPaintDC(a) //или
СMyPaintDC::CMyPaintDC(CWnd* a):CPaintDC(a)
{}
причем у меня почему-то нельзя определять конструктор в заголовочном файле, там где я его объявил, просто компилятор пишет ошибку. Нельзя написать даже вот так
C++
1
CMyPaintDC(){} //ругается
Конструктор обязательно должен быть определен в .cpp файле...

Еще вопрос:
Если я допускаю ошибку в коде, то у меня запускается предыдущая рабочая версия программы, а не сообщение об ошибке. Я закрываю программу, щелкаю на вкладку ошибок и там уже смотрю...
Где в настройках студии изменить настройку, чтобы мне сообщалось о допущенной мной ошибке?
Yandex
Объявления
26.04.2013, 12:49     Наследование, конструктор класса
Ответ Создать тему
Опции темы

Текущее время: 17:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru