Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.02.2011, 20:12   #1
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

Решил снова перейти с шарпа на плюсы. УЖе год как программировал на шарпе, пришлось вспомнить С++. Языки очень похожие, но разщличия всё-таки есть.
Подскажите, пожалуйста, имеется у меня класс Window, а в нём переменная variable, какая разница между запиьсю в конструкторе
this->variable
и
variable

Код:
Window::Window(WNDCLASSEX w, char* caption, HINSTANCE hInstance)
	{
		this->windowStruct = w;
}
Можно ли со структурами проводить операции присвоения как я это сделал в операторе или же надо обязательно почленно присваивать?

Последний раз редактировалось Stilet; 05.02.2011 в 15:52.
Dimarik вне форума Ответить с цитированием
Старый 04.02.2011, 21:14   #2
alex_x_x
Форумчанин
 
Регистрация: 31.01.2011
Сообщений: 160
По умолчанию

Цитата:
Подскажите, пожалуйста, имеется у меня класс Window, а в нём переменная variable, какая разница между запиьсю в конструкторе
this->variable
и
variable
никакой, кроме того, что variable не может внезапно оказаться глобальной или локальной переменной
Цитата:
Можно ли со структурами проводить операции присвоения как я это сделал в операторе или же надо обязательно почленно присваивать?
можно, такое присваивание работает по принципу поразрядного копирования
те разницы нет
alex_x_x вне форума Ответить с цитированием
Старый 04.02.2011, 21:18   #3
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

есть класс Window,а в нём методы имеются, допустим, m1() и m2();
из метода m1 хочу вызвать метод m2.
Какая разница в вызове этого метода, если я его вызову:
window::m2();
this->m2();
m2();
Тоже никакой?
Dimarik вне форума Ответить с цитированием
Старый 04.02.2011, 21:31   #4
alex_x_x
Форумчанин
 
Регистрация: 31.01.2011
Сообщений: 160
По умолчанию

принципиально никакой
просто запись
window::m2(); //так обычно вызывают статические методы и методы из родительского класса
this->m2(); //ну я даже не знаю принципиально повода так вызывать
alex_x_x вне форума Ответить с цитированием
Старый 04.02.2011, 21:39   #5
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

Спасибо. А ключевое слово static означает то же самое что и в C# ? Т.е. метод static- это метод, не требующий создания экземпляра класса (объекта)?
У меня, кстати, компилятор что-то стал ругаться после добавления слова static
Код:
class Window
{
	private:
		WNDCLASSEX windowStruct;//структура
	public:
		//конструкторы
		Window(char* caption, HINSTANCE hInstance);
		Window(WNDCLASSEX w, char* caption, HINSTANCE hInstance);
		static LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
};
Код:
static LRESULT CALLBACK Window::WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
	HDC hDC;
	PAINTSTRUCT ps;
	RECT rect;

	//и так далее
return 1;
}
static подчеркивает и пишет:
1 IntelliSense: a storage class may not be specified here c:\documents and settings\dimarik\мои документы\visual studio 2010\projects\blokirator\blokirator \window_components.cpp 72
Dimarik вне форума Ответить с цитированием
Старый 04.02.2011, 21:40   #6
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Я об этом писал:

Некоторые так делают, чтобы по одному взгляду на код было понятно, что мы работает с полем этого объекта.
А ещё этим пользуются для обхода так называемого variable shadowing:
Код:
void MyClass::myMethod(int value1, int value2)
{
    this->value1 = value1;
    this->value2 = value2;
}
Но такой громоздкой странной конструкции обычно предпочитают именование полей класса как mValue, m_value, value_ или _value. Тогда тоже по одному взгляду понятно, что работаем с полем объекта, а shadowing происходить вообще не будет. Лично я предпочитаю m_value (m_some_value).

Цитата:
Т.е. метод static- это метод, не требующий создания экземпляра класса (объекта)?
Да... есть ещё static поля, static глобальные и static локальные переменные.

Цитата:
Какая разница в вызове этого метода, если я его вызову:
window::m2();
this->m2();
m2();
Первое вызовет этот метод родительского класса.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su

Последний раз редактировалось Obey-Kun; 04.02.2011 в 21:42.
Obey-Kun вне форума Ответить с цитированием
Старый 04.02.2011, 22:00   #7
alex_x_x
Форумчанин
 
Регистрация: 31.01.2011
Сообщений: 160
По умолчанию

Dimarik, static в определении писать не надо, только в описании класса
связано это с тремя почти противоположными смыслами static в ++се
alex_x_x вне форума Ответить с цитированием
Старый 04.02.2011, 23:52   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
static подчеркивает и пишет:
1 IntelliSense: a storage class may not be specified here c:\documents and settings\dimarik\мои документы\visual studio 2010\projects\blokirator\blokirator \window_components.cpp 72
как это не странно, в тексте ошибки написано все.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 05.02.2011, 00:40   #9
alex_x_x
Форумчанин
 
Регистрация: 31.01.2011
Сообщений: 160
По умолчанию

Пепел Феникса, да ктож их читает =)
alex_x_x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц