Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
20 / 20 / 2
Регистрация: 28.11.2012
Сообщений: 365
1

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

26.04.2013, 00:53. Просмотров 1100. Ответов 5
Метки нет (Все метки)

Объясните мне пожалуйста, что значит такая конструкция:
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) //Определение конструктора, аналогичные непонятки
Объясните пожалуйста, что тут зачем?
Спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.04.2013, 00:53
Ответы с готовыми решениями:

Наследование. Конструктор базового класса в теле производного
Здравствуйте! Помогите, пожалуйста, разобраться. Есть пример: class String { protected:...

Конструктор класса не видит конструктор по умолчанию другого класса
Ошибка, естественно, в Classes.cpp, в строке 20. Ругается, что у класса TailNode нет конструктора...

Конструктор класса, конструктор копирования запускается не тот который нужен
Есть такой конструктор: Neuron::Neuron(int iType_activation_funk) { this->iType_act =...

Конструктор производного класса требует конструктор предка
Выдаёт вот такую вот ошибку: no matching function for call to 'Cube::Cube()' class Cube {...

5
Каратель
Эксперт С++
6593 / 4014 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
26.04.2013, 01:05 2
Цитата Сообщение от Xantrax Посмотреть сообщение
/*Объявление конструктора, зачем в параметры передается указатель на тип QWidget?*/
созданный виджет будет жить до тех пор пока живет его родитель, подробнее тут

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

Добавлено через 44 секунды
Цитата Сообщение от Xantrax Посмотреть сообщение
/* - определение конструктора класса, мне не понятно, что такое :CPaintDC(pWnd)*/
Цитата Сообщение от Xantrax Посмотреть сообщение
: QWidget(parent) //Определение конструктора, аналогичные непонятки
это список инициализации конструктора, а если конкретнее то вызов конструктора базового класса
0
20 / 20 / 2
Регистрация: 28.11.2012
Сообщений: 365
26.04.2013, 01:15  [ТС] 3
созданный виджет будет жить до тех пор пока живет его родитель
C++
1
class CMyPaintDC:public CPaintDC
родителем для данного класса является CPaintDС, почему же в параметрах конструктора указывается CWnd?
0
Каратель
Эксперт С++
6593 / 4014 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
26.04.2013, 01:18 4
Цитата Сообщение от Xantrax Посмотреть сообщение
Цитата Сообщение от Jupiter Посмотреть сообщение
созданный виджет будет жить до тех пор пока живет его родитель, подробнее тут
C++
1
class CMyPaintDC:public CPaintDC
родителем для данного класса является CPaintDС, почему же в параметрах конструктора указывается CWnd?
я говорил о Qt, повторюсь в MFC не силен, но по логике контекст рисования должен принадлежать окну, нельзя просто так создать контекст в отрыве от окна
0
:)
Эксперт С++
4763 / 3257 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
26.04.2013, 12:22 5
Цитата Сообщение от Xantrax Посмотреть сообщение
родителем для данного класса является CPaintDС,
Вероятно тут возникла путаница. Родитель - как базовый класс, и родитель - как контейнер в котором содержится виджет.
0
20 / 20 / 2
Регистрация: 28.11.2012
Сообщений: 365
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 файле...

Еще вопрос:
Если я допускаю ошибку в коде, то у меня запускается предыдущая рабочая версия программы, а не сообщение об ошибке. Я закрываю программу, щелкаю на вкладку ошибок и там уже смотрю...
Где в настройках студии изменить настройку, чтобы мне сообщалось о допущенной мной ошибке?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.04.2013, 12:49

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Наследование и конструктор.
Вот #include <iostream> #include <string> using namespace std; class String //базовый класс ...

Наследование(Не вызывается конструктор)
f3=f1+f2; 1) Вызывается Fraction operator+(const Fraction& other) 2) Для возвращенного значения...

Наследование и конструктор с параметрами
Добрый вечер! При разработке программы столкнулся с проблемой. По условию нужно использовать...

Наследование, перегрузка, конструктор
#include <iostream> class animal { public: animal() { } animal(int a) { age = a; }...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.