Вызов метода другого класса

Вызов статического метода из другого класса
Добрый день. Есть MAIN.cpp: STDMETHODIMP CMAIN::Function1(VARIANT Data,BYTE* pBuff) < .
Передача метода класса в качестве параметра для метода другого класса
Здравствуйте, Передо мной стоит такая задача. Необходимо разработать механизм, который бы мог.
Вызов метода объекта внутри определения метода другого объекта(вложенные классы)
Как мне вызвать метод объекта slider класса Slider внутри определения метода объекта класса.
495 / 377 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
в данном примере никак
![]()
13398 / 10675 / 6379
Регистрация: 18.12.2011
Сообщений: 28,512
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
#include using namespace std; class A { public: void Show() { cout "A" endl; }; }; class B { public: void Sm() { A a; a.Show(); cout "B" endl; } }; int main() { B ob; ob.Sm(); return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
#include using namespace std; class A { public: static void Show() { cout "A" endl; }; }; class B { public: void Sm() { A::Show(); cout "B" endl; } }; int main() { B ob; ob.Sm(); return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
#include using namespace std; class A { public: void Show() { cout "A" endl; }; }; class B:public A { public: void Sm() { Show(); cout "B" endl; } }; int main() { B ob; ob.Sm(); return 0; }
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Вызов метода производного класса через обращение к методу базового класса
Добрый день. Изучаю основы ООП, наткнулся на проблему. Если создавать классы внутри main.cpp.
Вызов метода класса в лямбде-функции, вызываемой в другом методе этого же класса
Здравствуйте. Помогите грамотно передать в лямбду метод класса. Упрощенно. Есть класс. В одном.
Вызов метода в классе из другого
Не получается выполнить следующую цепочку действий. Запускаю метод в классе B через main, он.
Вызов метода класса без создания экземпляра класса.
В общем мне для функционирования одной программы нужно постоянно вызывать метод одного из классов.
Или воспользуйтесь поиском по форуму:
Как из метода класса вызвать метод другого класса, когда оба внутри третьего класса?
Или я просто не вкурил, как вызвать вышележащий namespace. Или я делаю нечто нехорошее, за что бьют канделябром.
Зачем мне это нужно: в программе леплю класс, абстрагирующий от остального кода GUI. Внутри него должно крутится все связанное с *graphical toolkit name*. Два окна, два класса. В одном прилетает callback, оно себя закрывает и должно вызывать show для другого окна.

Gregon ★
02.12.12 16:33:12 MSK

1) передай в B инстанс a параметром. Я за этот вариант.
2) сделай глобальную переменную a (см. оператор global).
PS Кстати, перменные глобальны только в пределах одного модуля.
true_admin ★★★★★
( 02.12.12 16:42:22 MSK )
Ответ на: комментарий от true_admin 02.12.12 16:42:22 MSK

Сделал передачу инстанса в __init__(), заработало, спасибо.
Другие варианты как подобные вещи разруливать существуют? Имхо, если есть сотня окон то начинается трэш и угар: они создаются и уничтожаются. Придется создавать список и регулярно обновлять его. Выглядит как костыль. А глобальные переменные всегда предавались анафеме)
Gregon ★
( 02.12.12 16:54:30 MSK ) автор топика
Ответ на: комментарий от Gregon 02.12.12 16:54:30 MSK

я не понимаю что ты хочешь сделать, но раз прилетает callback то пусть прилетает вместе с инстансом для которого надо вызвать callback.
А список с регулярными обновлениями делается просто, посмотри weakref модуль. Дальше в __init__ просто в этот контейнер запихиваешь self.
import weakref container = weakref.weakSet() class Test: def __init__(self): container.add(self)
true_admin ★★★★★
( 02.12.12 17:02:10 MSK )

Может тебя так устроит?
class A(object): def func(self): print "it works" class B(object): def func2(self, ns): ns.a.func() class C(object): def __init__(self): self.a = A() self.b = B() self.b.func2(self) if __name__ == '__main__': c = C()
k0valenk0_igor ★★★
( 02.12.12 17:07:31 MSK )
Ответ на: комментарий от true_admin 02.12.12 17:02:10 MSK

Callback прилетает после нажатия кнопки в визарде первой настройки, с ним прилетает исключительно инфа «закрой окно, я закончил».
Gregon ★
( 02.12.12 17:15:18 MSK ) автор топика
Ответ на: комментарий от Gregon 02.12.12 17:15:18 MSK

я думаю ты что-то не то делаешь. Я надеюсь ты не пытаешься написать абстрактную обёртку для любого *graphical toolkit name*?
true_admin ★★★★★
( 02.12.12 17:17:25 MSK )
Ответ на: комментарий от k0valenk0_igor 02.12.12 17:07:31 MSK

Отлично, так тоже работает и теперь у меня есть доступ к неймспейсу суперкласса, большое спасибо.
Gregon ★
( 02.12.12 17:20:31 MSK ) автор топика

class A(object): def func(self): print "it works" class B(object): def func2(self): self.a.func() class C(object): def __init__(self): a = A() b = B() b.a = a b.func2() if __name__ == '__main__': c = C()
k0valenk0_igor ★★★
( 02.12.12 17:21:15 MSK )
Ответ на: комментарий от Gregon 02.12.12 17:20:31 MSK

Да не за что. Удачи, коллега!)))
k0valenk0_igor ★★★
( 02.12.12 17:22:09 MSK )
Ответ на: комментарий от Gregon 02.12.12 17:20:31 MSK

теперь у меня есть доступ к неймспейсу суперкласса
Что ты называешь «суперклассом»?
tailgunner ★★★★★
( 02.12.12 17:22:18 MSK )
Ответ на: комментарий от true_admin 02.12.12 17:17:25 MSK

Ну как сказать. я просто хочу завернуть всю требуху в один класс с определенным интерфейсом, чтобы в случае перехода на другой тулкит не пришлось переписывать код в самых неожиданных местах.
Gregon ★
( 02.12.12 17:22:59 MSK ) автор топика
Ответ на: комментарий от tailgunner 02.12.12 17:22:18 MSK

В данном случае экземпляр (объект) класса, в котором находится внутри несколько других объектов.
Gregon ★
( 02.12.12 17:26:39 MSK ) автор топика

Как из метода класса вызвать метод другого класса, когда оба внутри третьего класса?
как минимум так:
class A(object): def func(self): print "it works" class B(object): def func2(self, a): a.func() class C(object): def __init__(self): a = A() b = B() b.func2(a) if __name__ == '__main__': c = C()
AGUtilities ★★★
( 02.12.12 17:26:51 MSK )
Ответ на: комментарий от Gregon 02.12.12 17:22:59 MSK

я просто хочу завернуть всю требуху в один класс с определенным интерфейсом, чтобы в случае перехода на другой тулкит не пришлось переписывать код в самых неожиданных местах.
я так и думал. Забей на это потому что:
1) не справишься
2) это бессмысленная задача, 99% времени всё равно будешь сидеть либо на qt, либо на gtk
4) делать абстрактный универсальный код «на все случаи жизни» это классическая ошибка программистов. Протрахаешься неделю/месяц и забьёшь, а результата не получишь
5) даже если сделаешь костыль он будет страшен потому что тулкиты между собой отличаются не только именами функций, но ещё архитектурой. Поэтому у тебя будет, по-сути, написаны очень разные обёртки с одним API. Так сделай сразу как надо: разбей свою программу на низкоуровневую библиотеку и к ней напиши несколько интерфейсов.
Короче, потрать время с большей пользой.
true_admin ★★★★★
( 02.12.12 18:07:20 MSK )
Последнее исправление: true_admin 02.12.12 18:07:58 MSK (всего исправлений: 1)
Как вызвать метод из другого класса c
Пользователь
Регистрация: 28.03.2011
Сообщений: 32
Как вызвать функцию из класса ?
Есть класс, а в нем функция
class test < public: int sh(); >; sh()
А как теперь его вызвать ?
test::sh();
не прокатывает, вылазит ошибка
| Use . or -> to call ‘test::sh() |
, однако при попытке test.sh(); или test->sh(); тоже не компилируется
| Silly Student |
| Посмотреть профиль |
| Найти ещё сообщения от Silly Student |
Форумчанин
Регистрация: 07.08.2011
Сообщений: 576
вот так попробуй
int test::ch() < //тут тело метода >
Пользователь
Регистрация: 25.05.2011
Сообщений: 89
class test < public: int sh(); >; int test::sh() < ShowMessage("sh"); return 0; >void main()
Последний раз редактировалось _Alerter_; 13.10.2011 в 20:09 .
| Похожие темы | ||||
| Тема | Автор | Раздел | Ответов | Последнее сообщение |
| Как вызвать функцию из функции ? | PheonixS | JavaScript, Ajax | 3 | 16.12.2010 05:35 |
| Как вызвать функцию из юнита? | Des | Общие вопросы Delphi | 5 | 06.11.2010 12:47 |
| Вызвать функцию с известной сигнатурой для неизвестного класса. Интерфейс | Ferrum26 | Общие вопросы Delphi | 4 | 22.07.2010 14:26 |
| Как вызвать метод из другого класса в C# | KobolD | Помощь студентам | 6 | 25.06.2010 14:12 |
| Как вызвать функцию? | blackstersl | Общие вопросы Delphi | 10 | 07.06.2009 19:22 |
Вызов нестатичного метода из другого класса
P.S.Да, вопрос однозначно тупой, а ответ гениально прост.Но я пытался сделать все сам, так и не получилось.
13 дек 2017 в 13:32
Blaster b=new Blaster(); b.PewPew();
13 дек 2017 в 14:37
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Раз у вас есть класс Shoot , которому нужен бластер, то вам нужно дать этому классу экземпляр бластера. Соответственно бластер должен приходить либо в конструкторе (ну или в крайнем случае через публичное свойство), либо как аргумент метода.
Получится либо так:
public class Shoot : MonoBehaviour < Blaster blaster; public void Shot()< blaster.PewPew(); >// тут другой код >
public class Shoot : MonoBehaviour < Blaster blaster = new Blaster(); public void Shot()< blaster.PewPew(); >>
public class Shoot : MonoBehaviour < public void Shot(Blaster blaster)< blaster.PewPew(); >>