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

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

Войти
Регистрация
Восстановить пароль
 
CEBEP
107 / 107 / 9
Регистрация: 21.03.2010
Сообщений: 444
#1

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

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

Класс 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.08.2012, 00:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Трудности с организацией классовой иерархии (C++):

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

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

dynamic_cast в иерархии - C++
class A { .... }; class B : public A { public: A a1; A a2;

Визуальное отображение иерархии - C++
Затык небольшой. class foo { protected: list&lt;foo*&gt;subfoo; // blah-blah-blah Каждый экземпляр класса может...

Создание иерархии классов - C++
Создать абстрактный базовый класс Struct, с виртуальными методами изменения и получения значения информационного поля, и класс потомок...

Цепочка иерархии классов - C++
Какой доступ будет в цепочке protected - public - protected? ...

4
DU
1484 / 1130 / 45
Регистрация: 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
CEBEP
107 / 107 / 9
Регистрация: 21.03.2010
Сообщений: 444
21.08.2012, 00:54  [ТС] #3
Спасибо. А как быть если у меня все тела функций вынесены в cpp, сами описания классов находятся в соответствующих h?
0
DU
1484 / 1130 / 45
Регистрация: 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
CEBEP
107 / 107 / 9
Регистрация: 21.03.2010
Сообщений: 444
21.08.2012, 01:20  [ТС] #5
заробрался... спасибо ещё раз.
0
21.08.2012, 01:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.08.2012, 01:20
Привет! Вот еще темы с ответами:

Создать иерархии наследования - C++
a) Создать иерархии наследования: воздушный транспорт, пассажирский транспорт - лайнер Boing 747 b) Создать иерархии ...

Постоение иерархии наследования - C++
нужно определить три класса: Expression — базовый класс иерархии, Number — для представления чисел и BinaryOperation — класс описывающий...

Оператор вывода для иерархии - C++
Добрый вечер всем, Имеется класс Person, от него отнаследован класс Student. Есть 2 оператора чтения из потока std::istream&amp;...

Затрудние в названии иерархии классов - C++
Здравствуйте камрады. Помогите обозвать иерархию классов, в голову ничего толкового не приходит. struct Card1 { std::string...


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

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

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