Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> MFC про описание некоторых функций, почему так, а не иначе? 
:(
    Опции темы
gepard
  Дата 12.6.2004, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2477
Регистрация: 29.2.2004

Репутация: 2
Всего: 40



Код

#include <afxwin.h>
class ButtonClass:public CButton
{
public:
 afx_msg void OnLButtonDblClk(unsigned int, CPoint);
 afx_msg void OnRButtonDblClk(unsigned int, CPoint);
private:
 DECLARE_MESSAGE_MAP();
};
BEGIN_MESSAGE_MAP(ButtonClass, CButton)
ON_WM_LBUTTONDBLCLK()
ON_WM_RBUTTONDBLCLK()
END_MESSAGE_MAP();
void ButtonClass::OnLButtonDblClk(unsigned int, CPoint)
{
MoveWindow(CRect(120, 100, 220, 150), true);
}
void ButtonClass::OnRButtonDblClk(unsigned int, CPoint)
{
MoveWindow(CRect(120, 10, 220, 50), true);
}
class MainWindow:public CFrameWnd
{
public:
 MainWindow();
 ~MainWindow();
 afx_msg void OnLButtonDblClk(unsigned int, CPoint);
 afx_msg void OnRButtonDblClk(unsigned int, CPoint);
 afx_msg void OnKeyDown(unsigned int, unsigned int, unsigned int);
private:
 CStatic*  Label;
 ButtonClass* Button;
 CEdit*   Edit;
 DECLARE_MESSAGE_MAP();
};
BEGIN_MESSAGE_MAP(MainWindow, CFrameWnd)
ON_WM_LBUTTONDBLCLK()
ON_WM_RBUTTONDBLCLK()
ON_WM_KEYDOWN()
END_MESSAGE_MAP()
void MainWindow::OnKeyDown(unsigned int, unsigned int, unsigned int)
{
AfxMessageBox("Key Button Down");
}
void MainWindow::OnLButtonDblClk(unsigned int, CPoint)
{
AfxMessageBox("Left Button Click");
}
void MainWindow::OnRButtonDblClk(unsigned int, CPoint)
{
AfxMessageBox("Right Button Click");
}
MainWindow::MainWindow()
{    
Create(0, "Still MFC Application!", WS_OVERLAPPEDWINDOW, rectDefault, 0, 0);
if (Label=new CStatic)
 Label->Create("It's Working!", WS_CHILD|WS_VISIBLE|SS_CENTER, CRect(10, 10, 100, 30), this, 0);
if (Button=new ButtonClass)
 Button->Create("Push Me, plz", WS_CHILD|WS_VISIBLE|SS_CENTER, CRect(120, 10, 220, 50), this, 1);
if (Edit=new CEdit)
 Edit->Create(WS_CHILD|WS_VISIBLE|WS_BORDER, CRect(240, 10, 340, 50), this, 2);
}
MainWindow::~MainWindow()
{
if (Label) delete Label;
if (Button) delete Button;
if (Edit) delete Edit;
}
class Applications:public CWinApp
{
public:
 virtual int InitInstance();
};
int Applications::InitInstance()
{
m_pMainWnd=new MainWindow();
ASSERT(m_pMainWnd);
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
return true;
};

Applications application;

Меня интересует, почему в описании класса Applications функция InitInstance() описана как virtual. Что даёт это virtual?
И ещё один вопрос(не надо говорить, что два вопроса нельзя: правила. Вопросы-то балдовые для таких, как Mr.DuDa): почему функции OnLButtonDblClk, OnRButtonDblClk описываются как afx_msg void. Что даёт этот afx_msg
Я пробовал удалять - ничего не изменяется.


--------------------
Когда начинаются цифровые войны, а траффик разносит моё сознание по бесконечным просторам инета, подобно ветру, разносящему листву по полям, тогда и только тогда я чувствую себя свободным!
© Я, Берсерк, что значит - Неистовый. 
PM MAIL WWW ICQ   Вверх
chipset
Дата 12.6.2004, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: 27
Всего: 165



virtual - обозначает то что когда ты наследуешь от этого класса другой, ты можешь добавлять код функции, при этом AFAIK
Код

//interface
class a {
virtual int foo(int i);
}
//implementation
int a::foo(int i)//тут может быть и virtual надо писать, не помню
{
return i;
}
//наследуем
//interface
class b : public a {
virtual int foo(int i);//та же функция
}
//implementation
int b::foo(int i) {
return i+1;
}
//основной код
void main() {
a *inst = new b();//
printf("%d",inst->foo(6));

}

Выведет на экран 7, поскольку foo уже b'овская..
Обычно в MFC такой код
Код

CMyView::OnDraw(CDC* pDC) {
CView::OnDraw();
}

То есть вызываются некоторые стандартные функции, базового класса CView
(это не МФЦ, это чистейший С++)
----
afx_msg преобразуется в " ", то есть просто напоминает о том что эта функция подсоединена к мессаге...
---
Извини если чего то не понял... rolleyes.gif

Это сообщение отредактировал(а) chipset - 12.6.2004, 11:40


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
mr.DUDA
Дата 12.6.2004, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



Добавлю от себя, что с практической точки зрения, для MFC модификатор virtual даёт возможность вызывать InitInstance твоего класса по указателю на объект базового (CWinApp) класса. То есть, библиотека (не зная ничего о твоей реализации virtual-функции в производном классе) вызовет функцию InitInstance по указателю на объект CWinApp (получаемый по AfxGetApp), и в случае если ты переопределил InitInstance - будет вызвана твоя реализация; если же не переопределял - будет вызвана MFC'шная реализация.

З.Ы, инфа о virtual-функциях хранится в таблице vtbl объекта, содержащего эти функции.


--------------------
user posted image
PM MAIL WWW   Вверх
gepard
Дата 12.6.2004, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2477
Регистрация: 29.2.2004

Репутация: 2
Всего: 40



Спасибо, всё понял!
chipset
Что такое AFAIK?


Это сообщение отредактировал(а) gepard - 12.6.2004, 14:07


--------------------
Когда начинаются цифровые войны, а траффик разносит моё сознание по бесконечным просторам инета, подобно ветру, разносящему листву по полям, тогда и только тогда я чувствую себя свободным!
© Я, Берсерк, что значит - Неистовый. 
PM MAIL WWW ICQ   Вверх
chipset
Дата 12.6.2004, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: 27
Всего: 165



as far as I know - насколько я знаю rolleyes.gif
Для программера это действительно трудно для понимания
по сравнению с какими то там виртуальными функциями adv/65.gif


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
gepard
Дата 13.6.2004, 07:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2477
Регистрация: 29.2.2004

Репутация: 2
Всего: 40



Цитата
as far as I know - насколько я знаю 
Для программера это действительно трудно для понимания
по сравнению с какими то там виртуальными функциями

Выпендирлся. smile.gif



--------------------
Когда начинаются цифровые войны, а траффик разносит моё сознание по бесконечным просторам инета, подобно ветру, разносящему листву по полям, тогда и только тогда я чувствую себя свободным!
© Я, Берсерк, что значит - Неистовый. 
PM MAIL WWW ICQ   Вверх
Step
Дата 14.6.2004, 07:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25




 ! 
 
так, флеймить прекращаем, а то.....



--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.3988 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.