Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
108 / 108 / 23
Регистрация: 21.03.2010
Сообщений: 445
1

Трудности с организацией классовой иерархии

21.08.2012, 00:45. Показов 611. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Класс A использует данные класса B для выполнения своих методов, которые вызывает класс B. Что не хватает этому коду для того чтобы он закомпилировался?

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
 
class B;
 
class A
{
    B* v;
public:
    A(B* e): v(e) {}
    void m() { v->c(); }
    void c() { std::cout << 0; }
};
class B
{
    A* v;
public:
    B(): v(new A(this)) {}
    void m() { v->c(); }
    void c() { std::cout << 1; }
};
void main()
{
    B* b(new B);
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.08.2012, 00:45
Ответы с готовыми решениями:

Приведение указаталей, принадлежащих к различной классовой иерархии
1) Скажите, безопасно ли делать так без использования dynamic_cast: // пусть определены...

Трудности с организацией сети на основе Zyxel Keenetic 4G
Помогите разобраться как лучше сделать!? Имеется 2 здания. В каждом из них планируется поставить...

Организацией БД
Всем доброго времени суток! Занимаюсь созданием БД для своего маленького магазинчика, по ходу...

Несвободное общество это общество строгой классовой дисциплины и строгих классовых запретов
Монархические общества всегда имеют строгую классовую дисциплину и строгие классовые запреты, в...

4
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
21.08.2012, 00:48 2
реализуйте методы после объявления классов A и B. тогда, когда компилятор будет компилировать эти методы, он уже будет знать и о классе A и о классе B, т.е. код вызова методов этих классов будет компилироваться.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class A
{
    B* v;
public:
    A(B* e): v(e) {}
    void m() { v->c(); } // вот для компиляции этой строки класс B должен быть уже определен. но он определен ниже. поэтому метод нужно реализовывать после.
    void c() { std::cout << 0; }
};
class B
{
    A* v;
public:
    B(): v(new A(this)) {} // тут ок, потому что класс A определен выше.
    void m() { v->c(); } // тут ок, потому что класс A определен выше.
    void c() { std::cout << 1; }
};
 
void A::m() { v->c(); } // тут все ок. класс B уже определен и можно дергать его методы.
1
108 / 108 / 23
Регистрация: 21.03.2010
Сообщений: 445
21.08.2012, 00:54  [ТС] 3
Спасибо. А как быть если у меня все тела функций вынесены в cpp, сами описания классов находятся в соответствующих h?
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
21.08.2012, 01:02 4
там все будет нормально, потому что в спп файле определения (не имплементация методов) классов уже видны (за счет того, что в начале спп файла идут инклуды с этими определениями).
вообще, есть у меня непонятнки с терминами.

C++
1
2
3
4
5
6
7
8
class A
{
public:
  void F();   
};
 
// вот это я назвал определением класса. хотя возможно что правильно это называется объявлением класса.
// нужно поштудировать тему definition vs declaration
0
108 / 108 / 23
Регистрация: 21.03.2010
Сообщений: 445
21.08.2012, 01:20  [ТС] 5
заробрался... спасибо ещё раз.
0
21.08.2012, 01:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.08.2012, 01:20
Помогаю со студенческими работами здесь

Организацией БД(установка связей)
Здравствуйте. Помогите с организацией БД библиотеки. А именно со связями. Есть три таблицы ученики,...

Подскажите с организацией класса
Суть проблемы - необходимо разработать структуру данных обладающую следующими свойствами: 1) Класс...

Посоветуйте с организацией таблиц
Итак, есть 3 парикмахерских, каждая из которых оказывает несколько услуг (стрижки, маникюр, педикюр...

Посоветуйте с организацией Wi-Fi сети
В довольно большой загородный дом приходит провод с Интернетом Он втыкается в рутер Keenetic Giga...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru