С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Xantrax
19 / 19 / 1
Регистрация: 28.11.2012
Сообщений: 328
#1

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

26.04.2013, 00:53. Просмотров 813. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.04.2013, 00:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Наследование, конструктор класса (C++):

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

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

Наследование и конструктор. - C++
Вот #include <iostream> #include <string> using namespace std; class String //базовый класс { protected: enum {SZ = 80...

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

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

Пример класса с конструктором и деструктором, создание экземпляра класса через конструктор с параметрами - C++
Привести пример класса с конструктором и деструктором, созданием экземпляра класса с помощью конструктора с параметрами.

5
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 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) //Определение конструктора, аналогичные непонятки
это список инициализации конструктора, а если конкретнее то вызов конструктора базового класса
0
Xantrax
19 / 19 / 1
Регистрация: 28.11.2012
Сообщений: 328
26.04.2013, 01:15  [ТС] #3
созданный виджет будет жить до тех пор пока живет его родитель
C++
1
class CMyPaintDC:public CPaintDC
родителем для данного класса является CPaintDС, почему же в параметрах конструктора указывается CWnd?
0
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 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 не силен, но по логике контекст рисования должен принадлежать окну, нельзя просто так создать контекст в отрыве от окна
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
26.04.2013, 12:22 #5
Цитата Сообщение от Xantrax Посмотреть сообщение
родителем для данного класса является CPaintDС,
Вероятно тут возникла путаница. Родитель - как базовый класс, и родитель - как контейнер в котором содержится виджет.
0
Xantrax
19 / 19 / 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 файле...

Еще вопрос:
Если я допускаю ошибку в коде, то у меня запускается предыдущая рабочая версия программы, а не сообщение об ошибке. Я закрываю программу, щелкаю на вкладку ошибок и там уже смотрю...
Где в настройках студии изменить настройку, чтобы мне сообщалось о допущенной мной ошибке?
0
26.04.2013, 12:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.04.2013, 12:49
Привет! Вот еще темы с ответами:

Создать конструктор копий и оператор присваивания для класса компьютер и члена класса марка - C++
Создать конструктор копий и оператор присваивания для класса компьютер и члена класса марка. Всем огромное спасибо за помощь! |

Ромбовидное наследование. Конструктор внука. - C++
если хотите, можете почитать код - он довольно объёмный...но однотипный #include "stdafx.h" #include <iostream> #include <string> ...

Наследование и конструктор с аргументами по умолчанию - C++
Есть некоторый абстрактный класс "объект", который наследуют все объекты (код конструктора): Object(const D3DXVECTOR3& position, ...

Конструктор. Наследование. Список инициализации - C++
Если есть класс, который наследует другой класс, то как задать для конструктора список инициализации? class CKub { private: ...


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

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

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