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

Двухстороннее взаимодействие классов - C++

Восстановить пароль Регистрация
 
 
RAFA91
Заблокирован
30.10.2015, 15:44     Двухстороннее взаимодействие классов #1
Добрый день !

Столкнулся с такой технической проблемой.

Есть два класса А и В.

Класс B должен содержать обьект класса А , а класс А обьект класса В.

В результате компиляции получаю ошибки скорее всего из-за неправильного размещения классов.

Подскажите пожалуйста как решить эту проблему.

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
26
27
28
29
30
31
32
33
 #include <iostream>
using namespace std;
 
class B;
 
class A
{
    //B b; // ошибка
    public:
    A() {cout<<"Конструктор А"<<endl;} 
    void func_1()
    {
        cout<<"Класс А"<<endl;
    }
};
class B
{
    A a;
    public:
    B() {cout<<"Конструктор B"<<endl;} 
    void func_1()
    {
        cout<<"Класс В"<<endl;
        a.func_1();
    }
};
 
int main() 
{
    B b;
    b.func_1();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.10.2015, 15:44     Двухстороннее взаимодействие классов
Посмотрите здесь:

C++ Взаимодействие Двух классов.
C++ Взаимодействие объектов разных классов
C++ Взаимодействие между объектами единой иерархии классов
Взаимодействие плагинов C++
C++ Взаимодействие VB и VC++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4844 / 2983 / 367
Регистрация: 10.11.2010
Сообщений: 11,024
Записей в блоге: 10
Завершенные тесты: 1
02.11.2015, 15:32     Двухстороннее взаимодействие классов #21
Цитата Сообщение от RAFA91 Посмотреть сообщение
Можно ли применять такой подход взаимодействия классов ?
Можно всё что компилируется.
Вопрос в том, устраивает ли тебя такой подход.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
RAFA91
Заблокирован
02.11.2015, 16:15  [ТС]     Двухстороннее взаимодействие классов #22
Цитата Сообщение от castaway Посмотреть сообщение
страивает ли тебя такой подход.

Вы можете предложить более элегантное решение ? В книгах для начинающих не описывается взаимодействие классов, поэтому приходится пользоваться уже тем что более менее знаю.
castaway
Эксперт С++
4844 / 2983 / 367
Регистрация: 10.11.2010
Сообщений: 11,024
Записей в блоге: 10
Завершенные тесты: 1
02.11.2015, 16:24     Двухстороннее взаимодействие классов #23
Цитата Сообщение от RAFA91 Посмотреть сообщение
Вы можете предложить более элегантное решение ?
Уже предлагали. Указатели.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
struct A;
struct B;
 
struct A {
    B * m_b;
    void set( B * b ) { m_b = b; }
};
 
struct B {
    A * m_a;
    void set( A * a ) { m_a = a; }
};
 
int main() {
    A a;
    B b;
    a.set( &b );
    b.set( &a );
}
RAFA91
Заблокирован
03.11.2015, 15:19  [ТС]     Двухстороннее взаимодействие классов #24
Цитата Сообщение от castaway Посмотреть сообщение
Уже предлагали. Указатели.
хранить адрес в классе в принципе отличная идея, но что если обьект был в куче , а потом удален ?

что нужно самому за эти следить и искусственно обнулять указатель ?
castaway
Эксперт С++
4844 / 2983 / 367
Регистрация: 10.11.2010
Сообщений: 11,024
Записей в блоге: 10
Завершенные тесты: 1
03.11.2015, 15:33     Двухстороннее взаимодействие классов #25
Цитата Сообщение от RAFA91 Посмотреть сообщение
что нужно самому за эти следить и искусственно обнулять указатель ?
Да. А что, разве это такая большая проблема?
RAFA91
Заблокирован
03.11.2015, 15:36  [ТС]     Двухстороннее взаимодействие классов #26
ну так это ж как минимум надо лепить метод или открывать поле указателя.
Renji
1535 / 983 / 240
Регистрация: 05.06.2014
Сообщений: 2,963
03.11.2015, 19:47     Двухстороннее взаимодействие классов #27
Цитата Сообщение от RAFA91 Посмотреть сообщение
что нужно самому за эти следить и искусственно обнулять указатель ?
Нет, просто сложить A и B в класс AB.
C++
1
2
3
4
5
6
7
8
class AB
{
public:
    AB():_A(&_B),_B(&_A){}
private:
    A _A;
    B _B;
};
RAFA91
Заблокирован
04.11.2015, 14:38  [ТС]     Двухстороннее взаимодействие классов #28
Цитата Сообщение от Renji Посмотреть сообщение
Нет, просто сложить A и B в класс AB.
и что мы с этого будим иметь ? накой вообще класс AB нарисовался ?

вот тут опять два обьекта создаются одновременно , а я уже вроде говорил , что они могут создаваться или разрушатся не одновременно.
RAFA91
Заблокирован
06.11.2015, 15:30  [ТС]     Двухстороннее взаимодействие классов #29
Добрый день !
Для взаимодействия классов решил воспользоваться указателем на функцию в одном из-классе что-бы не опускать реализацию функции func() класса А ниже класса B. А то ведь по хорошему вся реализация методов должна лежать в отдельном файле.
вообщем вот что вышло. есть ли еще более красивый подход ?

______________________________________________

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include "stdafx.h"
#include <iostream>
using namespace std;
 
class B;
 
typedef int(B::*Rafa)()const;
 
class A
{
    int x;
    B *b;
    Rafa k;
public:
A(int _x,Rafa _k) : x(_x), k(_k) {cout<<"constructor А "<<this<<endl;}
~A() {cout<<"destructor А"<<this<<endl;}
int get() const {return x;}
void set(B *_b) {b = _b;}
void func(){cout<<"data B: x = "<<(b->*k)()<<endl;} 
};
 
class B
{
    int x;
    A *a;
public:
B(int _x) : x(_x) {cout<<"constructor B "<<this<<endl;}
~B() {cout<<"destructor B"<<this<<endl;}
int get() const {return x;}
void set(A *_a) {a = _a;}
void func() {cout<<"data A: x = "<<a->get()<<endl;}
};
 
 
 
 
int main() 
{
    
    A *a = new A(12,&B::get);
    B *b = new B(165);
    a->set(b);
    b->set(a);
    cout<<"*******************"<<endl;
    a->func();
    b->func();
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.11.2015, 16:55     Двухстороннее взаимодействие классов
Еще ссылки по теме:

C++ Взаимодействие классов
C++ Как реализовать взаимодействие классов в игре "Змейка"
Взаимодействие классов C++

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

Или воспользуйтесь поиском по форуму:
RAFA91
Заблокирован
06.11.2015, 16:55  [ТС]     Двухстороннее взаимодействие классов #30
******************************************************


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

методы лежат в cpp
Миниатюры
Двухстороннее взаимодействие классов   Двухстороннее взаимодействие классов   Двухстороннее взаимодействие классов  

Двухстороннее взаимодействие классов   Двухстороннее взаимодействие классов  
Yandex
Объявления
06.11.2015, 16:55     Двухстороннее взаимодействие классов
Ответ Создать тему
Опции темы

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