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

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

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

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

19.07.2012, 23:54. Просмотров 449. Ответов 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();

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

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

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

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

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

Как вызвать метод объекта из контейнера? - C++
Есть абстрактный класс E, производный от CObject, в нем чистая виртуальная войдовская функция. Создал динамические объекты классов, которые...

Вызвать виртуальный метод элемента вектора - C++
class Parent { public: Parent(); virtual void fn(); } class Child: public Parent { public

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
canopen
412 / 411 / 12
Регистрация: 16.07.2012
Сообщений: 886
19.07.2012, 23:57     Можно ли так вызвать метод? #2
Так сделайте в классе B функцию которая бы вызывала a->fun1() и в классе C вызовете эту новую функцию
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 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
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()? где эта штука создана?
alsav22
5416 / 4812 / 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
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
22.07.2012, 00:14     Можно ли так вызвать метод? #7
Цитата Сообщение от alsav22 Посмотреть сообщение
Здесь.
что - "здесь"? в классе C нет ничего, кто называлось бы "a"
ValeryS
Модератор
6550 / 5016 / 463
Регистрация: 14.02.2011
Сообщений: 16,730
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
162 / 143 / 12
Регистрация: 10.07.2012
Сообщений: 725
22.07.2012, 20:50     Можно ли так вызвать метод? #9
признаться честно, вся проблема в том, чтобы правильно воспользоваться тем, что в народе называется инкапсуляция...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.07.2012, 00:07     Можно ли так вызвать метод?
Еще ссылки по теме:

Как вызвать метод для for_each? - C++
Здравствуйте. Мне нужно вызвать один метод для коллекции объектов. Что то вроде такого std::for_each( container.begin(),...

Не могу в дочернем классе вызвать protected метод - C++
Всем привет! Начал писать одну программку, и столкнулся со следующей проблемой: у меня пока 2 класса: MemObject и Vector, где Vector...

Вызвать метод базового класса из метода наследника - C++
Есть базовый класс с виртуальным методом, выводящим значение его полей. В классе-наследнике есть метод с таким же названием, и он также...

Как вызвать метод вектора из динамического массива? - C++
vector&lt;some_type&gt; *t=new vector&lt;int&gt; ; как вызвать метод из структуры\класса some_type? как разыменовать этот указатель, я уже как не...


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

Или воспользуйтесь поиском по форуму:
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;  
}
Yandex
Объявления
23.07.2012, 00:07     Можно ли так вызвать метод?
Ответ Создать тему
Опции темы

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