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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.01.2011, 12:52   #1
coinkrsk
пыжашийся нуб
Пользователь
 
Регистрация: 19.06.2010
Сообщений: 93
По умолчанию вызов метода неинициализированной переменной класса

Код:
class Foo
{
public:
	void print( ) { std::cout << "print"; }
};

int main()
{
	Foo* foo = 0;
	foo->print( );
    
	return 0;
}
Стало интересно, а почему работает этот кусок кода?
coinkrsk вне форума Ответить с цитированием
Старый 02.01.2011, 13:50   #2
still_alive
Great Code Monkey
Форумчанин
 
Аватар для still_alive
 
Регистрация: 09.08.2007
Сообщений: 533
По умолчанию

В общем случае поведение не определено. В вашем - компилятор преобразовывает вызов foo->print() в что-то подобное этому _Foo_print(foo), которое работает вследствие того, что foo (общеизвестное this) внутри print нигде не разыменовывается.
still_alive вне форума Ответить с цитированием
Старый 02.01.2011, 14:05   #3
coinkrsk
пыжашийся нуб
Пользователь
 
Регистрация: 19.06.2010
Сообщений: 93
По умолчанию

_Foo_print(foo) - не понятно
типо
void _Foo_print( Foo* ) ?
coinkrsk вне форума Ответить с цитированием
Старый 02.01.2011, 14:20   #4
still_alive
Great Code Monkey
Форумчанин
 
Аватар для still_alive
 
Регистрация: 09.08.2007
Сообщений: 533
По умолчанию

Цитата:
Сообщение от coinkrsk Посмотреть сообщение
_Foo_print(foo) - не понятно
Что непонятно? Просто вызов функции. В качестве this передается foo.
Цитата:
Сообщение от coinkrsk Посмотреть сообщение
типо
void _Foo_print( Foo* ) ?
Сигнатура функции-члена примерно такая. В натуре, типо.
still_alive вне форума Ответить с цитированием
Старый 02.01.2011, 17:26   #5
UltimaBeaR
Форумчанин
 
Аватар для UltimaBeaR
 
Регистрация: 21.12.2010
Сообщений: 199
По умолчанию

Код:
Foo* foo = 0;
foo->print( );
=
Код:
Foo* foo = 0;
Foo::print(foo);

->

void print(Foo* this) { std::cout << "print"; }
вот псевдокод чтоб было понятно - обращения к NULL у тебя тут не идет внутри метода так что лезть ошибке неоткуда
UltimaBeaR вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вызов метода в другом классе jec Общие вопросы C/C++ 8 31.12.2010 21:16
Вызов метода из метода kuzjma PHP 8 10.12.2010 02:38
Вызов метода в asm вставке. Mixasik Общие вопросы Delphi 3 20.02.2010 10:42
mootools: вызов метода класса в цикле each toXx JavaScript, Ajax 1 18.03.2009 19:20
Вызов Метода из др. модуля Mickle Общие вопросы Delphi 2 10.05.2007 23:41