Форум программистов, компьютерный форум CyberForum.ru

Можно ли так вызвать метод? - C++

Восстановить пароль Регистрация
 
amatorIP
 Аватар для amatorIP
3 / 3 / 0
Регистрация: 22.07.2010
Сообщений: 141
19.07.2012, 23:54     Можно ли так вызвать метод? #1
Всем доброго времени суток!

Вот такая ситуация.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class A {
void fun();
};
 
class B {
A a;
};
 
/*и отдельно живущий класс C из коготорого нужно магическим способом вызвать a->fun1();*/
class C {
void fun2();
};
void C::fun2() {
    a->fun1();
}
Возможно ли что-то подобно?
Или как мне сообщить из класса С в класс В чтоб в классе В вызвать а->fun1();

Надеюсь я понятно изложил суть проблемы.
Спасибо!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
canopen
411 / 410 / 12
Регистрация: 16.07.2012
Сообщений: 886
19.07.2012, 23:57     Можно ли так вызвать метод? #2
Так сделайте в классе B функцию которая бы вызывала a->fun1() и в классе C вызовете эту новую функцию
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
19.07.2012, 23:59     Можно ли так вызвать метод? #3
C++
1
2
3
4
void C::fun2(B* a) 
{
    a->fun1();
}
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
20.07.2012, 00:07     Можно ли так вызвать метод? #4
Цитата Сообщение от amatorIP Посмотреть сообщение
C++
1
2
3
4
5
6
7
/*и отдельно живущий класс C из коготорого нужно магическим способом вызвать a->fun1();*/
class C {
void fun2();
};
void C::fun2() {
    a->fun1();
}
изложил непонятно. что такое "a" в ф-ии C::fun2()? где эта штука создана?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.07.2012, 03:37     Можно ли так вызвать метод? #5
изложил непонятно. что такое "a" в ф-ии C::fun2()? где эта штука создана?
Здесь.
Цитата Сообщение от amatorIP Посмотреть сообщение
C++
1
2
3
class B {
A a;
};
PreFX
25 / 20 / 1
Регистрация: 14.07.2012
Сообщений: 176
20.07.2012, 12:18     Можно ли так вызвать метод? #6
Хм, вроде бы данные в классе дефолтно находятся в private.
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
22.07.2012, 00:14     Можно ли так вызвать метод? #7
Цитата Сообщение от alsav22 Посмотреть сообщение
Здесь.
что - "здесь"? в классе C нет ничего, кто называлось бы "a"
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,056
22.07.2012, 00:39     Можно ли так вызвать метод? #8
Цитата Сообщение от Jupiter Посмотреть сообщение
C++
1
2
3
4
void C::fun2(B* a) 
{
 a->fun1();
}
По моему ты не прав
B ведь не потомок A
он содержит объект A
Цитата Сообщение от amatorIP Посмотреть сообщение
C++
1
2
3
class B {
A a;
};
так что так
C++
1
2
3
4
void C::fun2(B* a) 
{
 a->a.fun1();
}
чтобы меньше путаницы
C++
1
2
3
4
void C::fun2(B* b) 
{
 b->a.fun1();
}
ну и чтобы не усложнять то так
C++
1
2
3
4
void C::fun2(A* a) 
{
 a->a.fun1();
}
Добавлено через 12 минут
Цитата Сообщение от ValeryS Посмотреть сообщение
ну и чтобы не усложнять то так
C++
1
2
3
4
void C::fun2(A* a) 
{
 a->a.fun1();
}
пардон наврал
вот так
C++
1
2
3
4
void C::fun2(A* a) 
{
 a->fun1();
}
salam
157 / 138 / 11
Регистрация: 10.07.2012
Сообщений: 709
22.07.2012, 20:50     Можно ли так вызвать метод? #9
признаться честно, вся проблема в том, чтобы правильно воспользоваться тем, что в народе называется инкапсуляция...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.07.2012, 00:07     Можно ли так вызвать метод?
Еще ссылки по теме:

C++ Вызвать метод класса в другом классе
C++ Как вызвать метод класса?
Как вызвать из метода метод? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
23.07.2012, 00:07     Можно ли так вызвать метод? #10
вот делегат тебе

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <functional>
#include <iostream>
 
class A {
public:
   A (int a) : m_a(a) {}
   int fun() { return m_a; }
private: 
   int m_a;  
};
 
class B {
public:
   B (std::function<int()>& fun) : m_fun(fun) {}
   int fun() { return m_fun(); }
private:
   std::function<int()>& m_fun; 
};
 
int main() {
   A a(10); 
   std::function<int()> f = std::bind(&A::fun, &a);
   B b(f);
   std::cout << b.fun() << std::endl;  
}
Yandex
Объявления
23.07.2012, 00:07     Можно ли так вызвать метод?
Ответ Создать тему
Опции темы

Текущее время: 15:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru