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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.02.2012, 14:29   #1
BagmutA
 
Регистрация: 09.03.2011
Сообщений: 4
По умолчанию Вопрос о static методе

Имеется объект класса A.
Имеется класс B в котором объявлен статический метод M.
Из объект класса A вызывается метод M.

Можно ли получить в методе M указатьль на объект класа из которого производился вызов этого метода?
BagmutA вне форума Ответить с цитированием
Старый 14.02.2012, 14:51   #2
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Можно. Если объект класса А, который вызывает статик-метод М, скормит методу М свой this, то метод М может запомнить этот this, и таким образом запомнить, кто его вызвал.
_Bers вне форума Ответить с цитированием
Старый 14.02.2012, 15:02   #3
artush1984
Форумчанин
 
Аватар для artush1984
 
Регистрация: 27.04.2009
Сообщений: 184
По умолчанию

статичный метод не принадлежит объекту ! Он принадлежит классу если вам угодно , он просто в области видимости класса B
его можно вызвать и до создания объекта! Соответственно this он не видит !
Hа C я могy пpосто делать ошибки, на C++ я могy их наследовать!
artush1984 вне форума Ответить с цитированием
Старый 14.02.2012, 16:22   #4
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от artush1984 Посмотреть сообщение
статичный метод не принадлежит объекту ! Он принадлежит классу если вам угодно , он просто в области видимости класса B
его можно вызвать и до создания объекта! Соответственно this он не видит !
Что мешает статик-мемберу скормить указатель this?
_Bers вне форума Ответить с цитированием
Старый 14.02.2012, 17:08   #5
artush1984
Форумчанин
 
Аватар для artush1984
 
Регистрация: 27.04.2009
Сообщений: 184
По умолчанию

Цитата:
Что мешает статик-мемберу скормить указатель this?
это уже зависит от того что вы понимаете под понятием скормить !
И вообще как вы себе это представляете ?
Hа C я могy пpосто делать ошибки, на C++ я могy их наследовать!
artush1984 вне форума Ответить с цитированием
Старый 14.02.2012, 17:15   #6
artush1984
Форумчанин
 
Аватар для artush1984
 
Регистрация: 27.04.2009
Сообщений: 184
По умолчанию

Код:
#include <iostream>
#include <string>

class B{
public:
	template <typename T>
	static void foo_B( T* a ){
		std::cout << a->str << std::endl;
	}
};
////////////////////////////////////////////////////////////////////////

class A{
public:
	std::string str;
	A(std::string& s) : str(s) { }
	void getString() {
		B::foo_B( this );
	}
};
////////////////////////////////////////////////////////////////////////

int main(int argc, char** argv)
{
	std::string t("test");
	A a(t);
	a.getString();
	system("pause");
	return 0;
}
Как то так да?
По моему немного сложновато .....
Hа C я могy пpосто делать ошибки, на C++ я могy их наследовать!
artush1984 вне форума Ответить с цитированием
Старый 14.02.2012, 17:16   #7
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от artush1984 Посмотреть сообщение
это уже зависит от того что вы понимаете под понятием скормить !
И вообще как вы себе это представляете ?
Код:
//где то в декларативной части класса
publuc:
  static void Member(mySuperPuperClass* ptr) 
 {
      //когда объект супер-пупер класса толкает статик-мембер,
      //он скармливает ему свой this
   ...
     //дальше, статик-мембер будет делать с указателем все, 
     //что ему вздумается.
 }
Скормить функции данные - значит подать их этой функции на вход.
Входные данные функций - это списки их аргументов.

Толкнуть функцию - значит запустить эту функцию, скормив ей все необходимые ей данные. В данном случае - указатель this
_Bers вне форума Ответить с цитированием
Старый 14.02.2012, 17:55   #8
BagmutA
 
Регистрация: 09.03.2011
Сообщений: 4
По умолчанию

Имелось в виду без явной передачи указателя вызывающего объекта как аргумента статической функции
BagmutA вне форума Ответить с цитированием
Старый 14.02.2012, 18:28   #9
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от BagmutA Посмотреть сообщение
Имелось в виду без явной передачи указателя вызывающего объекта как аргумента статической функции
Сущность А толкает сущность Б.
Сущность Б понятия не имеет, кто её толкает. Если это знание не передать явно каким бы то ни было образом.
_Bers вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Элемент STATIC Dimarik Win Api 9 20.06.2011 20:42
static Gen_r_questions PHP 7 05.04.2011 15:12
Использование static Syltan Общие вопросы по Java, Java SE, Kotlin 3 07.06.2010 20:59
Static члены assasin Общие вопросы C/C++ 2 21.08.2009 10:54
По-поводу Static volnixx PHP 3 11.03.2009 12:04