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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
amatorIP
3 / 3 / 0
Регистрация: 22.07.2010
Сообщений: 141
#1

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

19.07.2012, 23:54. Просмотров 454. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Можно ли так вызвать метод? (C++):

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

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

Вызвать метод через указатель на метод - C++
class MenuItem { public: MenuItem(string name, MenuItem *parent = nullptr, void(MenuItem::*EventHadler)() = nullptr, bool isSelected...

Как можно сделать что бы в консольном окне можно было вызвать контекстное меню как в win cmd? - C++
Если вызвать cmd в windows то в нем можно вызывать контекстное меню и совершать различные полезные действия (копирование/вставка). А те...

std::list<T*> вызвать метод - C++
Как во время просмотра MyList вызвать метод Show() каждого обьекта? class MyVehicle { public: virtual void Show() { /* ......

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
canopen
413 / 413 / 12
Регистрация: 16.07.2012
Сообщений: 886
19.07.2012, 23:57 #2
Так сделайте в классе B функцию которая бы вызывала a->fun1() и в классе C вызовете эту новую функцию
1
Jupiter
Каратель
Эксперт С++
6554 / 3975 / 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();
}
1
novi4ok
551 / 504 / 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()? где эта штука создана?
0
alsav22
5419 / 4815 / 442
Регистрация: 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 / 1
Регистрация: 14.07.2012
Сообщений: 176
20.07.2012, 12:18 #6
Хм, вроде бы данные в классе дефолтно находятся в private.
0
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
22.07.2012, 00:14 #7
Цитата Сообщение от alsav22 Посмотреть сообщение
Здесь.
что - "здесь"? в классе C нет ничего, кто называлось бы "a"
0
ValeryS
Модератор
6631 / 5038 / 466
Регистрация: 14.02.2011
Сообщений: 16,849
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
163 / 144 / 12
Регистрация: 10.07.2012
Сообщений: 728
22.07.2012, 20:50 #9
признаться честно, вся проблема в том, чтобы правильно воспользоваться тем, что в народе называется инкапсуляция...
0
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.07.2012, 00:07
Привет! Вот еще темы с ответами:

Как вызвать из метода метод? - C++
Здравствуйте. Прошу Вас помочь. Как мне вызвать из метода Set метод Draw? Мне надо передать объект A в Draw (у которого есть координаты x и...

Как вызвать метод класса? - C++
User.cpp User::User(string name): name(name), price(0), amount(0) { cout &lt;&lt;&quot;User has been create&quot;; } ...

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

Как вызвать метод родительского класса; - C++
Собственно вопрос; Есть класс a и b; Класс b унаследован от класса a; И как теперь из класса b вызвать функцию класса a;


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
23.07.2012, 00:07
Ответ Создать тему
Опции темы

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