Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
amatorIP
3 / 3 / 0
Регистрация: 22.07.2010
Сообщений: 141
#1

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

19.07.2012, 23:54. Просмотров 480. Ответов 9
Метки нет (Все метки)

Всем доброго времени суток!

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

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();

Надеюсь я понятно изложил суть проблемы.
Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.07.2012, 23:54
Ответы с готовыми решениями:

Можно ли вручную вызвать метод main()
у меня в книге по C++ написано, что метод main() является зарезервированным...

Определить функцию-член в наследнике так, чтобы её можно было вызвать только по ссылке на базовый класс
Пусть дан абстрактный класс A class A { public: void virtual method()...

Вызвать метод через указатель на метод
class MenuItem { public: MenuItem(string name, MenuItem *parent = nullptr,...

Как можно сделать что бы в консольном окне можно было вызвать контекстное меню как в win cmd?
Если вызвать cmd в windows то в нем можно вызывать контекстное меню и совершать...

Как вызвать метод класса?
User.cpp User::User(string name): name(name), price(0), ...

9
canopen
419 / 420 / 93
Регистрация: 16.07.2012
Сообщений: 886
19.07.2012, 23:57 #2
Так сделайте в классе B функцию которая бы вызывала a->fun1() и в классе C вызовете эту новую функцию
1
Jupiter
Каратель
Эксперт С++
6569 / 3990 / 400
Регистрация: 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();
}
1
novi4ok
551 / 504 / 25
Регистрация: 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()? где эта штука создана?
0
alsav22
5441 / 4836 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
20.07.2012, 03:37 #5
изложил непонятно. что такое "a" в ф-ии C::fun2()? где эта штука создана?
Здесь.
Цитата Сообщение от amatorIP Посмотреть сообщение
C++
1
2
3
class B {
A a;
};
0
PreFX
25 / 20 / 2
Регистрация: 14.07.2012
Сообщений: 176
20.07.2012, 12:18 #6
Хм, вроде бы данные в классе дефолтно находятся в private.
0
novi4ok
551 / 504 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
22.07.2012, 00:14 #7
Цитата Сообщение от alsav22 Посмотреть сообщение
Здесь.
что - "здесь"? в классе C нет ничего, кто называлось бы "a"
0
ValeryS
Модератор
7210 / 5473 / 681
Регистрация: 14.02.2011
Сообщений: 18,512
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();
}
0
salam
175 / 156 / 29
Регистрация: 10.07.2012
Сообщений: 766
22.07.2012, 20:50 #9
признаться честно, вся проблема в том, чтобы правильно воспользоваться тем, что в народе называется инкапсуляция...
0
alex_x_x
бжни
2455 / 1661 / 134
Регистрация: 14.05.2009
Сообщений: 7,162
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;  
}
0
23.07.2012, 00:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.07.2012, 00:07

Вызвать абстрактный метод из конструктора
Компилятор не разрешает вызвать с конструктора виртуальный метод. Почему? Я же...

Не получается вызвать метод класса
Помогите найти ошибку в коде не могу вызвать тестовую (отладочную процедуру)...

std::list<T*> вызвать метод
Как во время просмотра MyList вызвать метод Show() каждого обьекта? class...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru