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

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

Войти
Регистрация
Восстановить пароль
 
skvor
640KB мне хватило на всё.
118 / 49 / 2
Регистрация: 07.06.2009
Сообщений: 442
#1

Описание двух "пересекающихся" классов - C++

27.08.2011, 16:48. Просмотров 923. Ответов 10

Как сделать два класса в которых методы используют параметры с типами друг-друга
C++
1
2
3
4
5
6
7
8
9
10
11
12
class c1
{ public:
    int param;
    int method(c2 param);
};
class c2
{ public:
    int param;
    int method(c1 param) { return param.param; }
};
 
int c1::method(c2 param) { return param.param; }
в четвёртой строке c2 "ещё" не известен.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.08.2011, 16:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Описание двух "пересекающихся" классов (C++):

Описание классов. Классы "Шар" и "Ящик для шаров" - C++
1.Опишите класс "шар", описывающий габариты и вес. Данные класса: радиус шара,вес. Методы класса: должны обеспечить минимальную...

Описание классов. Класс "Угол" - C++
Опишите класс "Угол" для измерения углов. Данные класса : число градусов и минут Методы класса : должны обеспечить минимальную...

Создать иерархию классов "Фирма", "Бухгалтер", "Сотрудник", "Зарплата" - C++
Само по себе понятие "зарплата" не особенно конкретное: оно включает и почасовую, и ставочную зарплату, и комиссионные, и процент с продаж....

Перезагрузка оператора "=" для двух классов - C++
Есть такой исходник с двумя классами, но не работает перегрузка оператора "=" #include "stdafx.h" #include <iostream> using...

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно". Я так...

ткните мордой плз на описание конструкций типа defect?"brak":"goden" - C++
вот пример использования http://codepad.org/VbScnm6F

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
grizlik78
Эксперт С++
1911 / 1443 / 112
Регистрация: 29.05.2011
Сообщений: 3,000
27.08.2011, 16:50 #2
Ну так добавь в самое начало
C++
1
class c2;
1
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
27.08.2011, 16:51 #3
skvor, объявить c2 до c1.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class c2;
 
class c1
{ public:
    int param;
    int method(c2 param);
};
class c2
{ public:
    int param;
    int method(c1 param) { return param.param; }
};
 
int c1::method(c2 param) { return param.param; }
2
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1287 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
27.08.2011, 17:25 #4
Цитата Сообщение от silent_1991 Посмотреть сообщение
skvor, объявить c2 до c1.
Кажется, не получится. Ведь по значению передаётся объект, а не по ссылке или указателю.
0
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
27.08.2011, 17:42 #5
Deviaphan, студия компилит...
0
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1287 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
27.08.2011, 18:17 #6
Цитата Сообщение от silent_1991 Посмотреть сообщение
Deviaphan, студия компилит...
По идее странно. Ведь размер не известен...
Или потому что реализация уже после объявления класса с2.
0
skvor
640KB мне хватило на всё.
118 / 49 / 2
Регистрация: 07.06.2009
Сообщений: 442
27.08.2011, 18:20  [ТС] #7
Спасибо, работает. Ещё б кто объяснил, в чём тайный смысл этого. Ведь по сути
C++
1
class c2;
ничего не описывает, или это просто некая гарантия того, что позже будет?
При прохождении компилятором 4 строки всё равно ничего не известно о свойствах передаваемого аргумента.
0
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
27.08.2011, 18:24 #8
skvor, главное, что компилятор понимает, что теоретически такая сущность может иметь место.
0
grizlik78
Эксперт С++
1911 / 1443 / 112
Регистрация: 29.05.2011
Сообщений: 3,000
27.08.2011, 18:26 #9
Цитата Сообщение от skvor Посмотреть сообщение
ничего не описывает, или это просто некая гарантия того, что позже будет?
Это указывает компилятору, что идентификатор c2 является типом.
Цитата Сообщение от skvor Посмотреть сообщение
При прохождении компилятором 4 строки всё равно ничего не известно о свойствах передаваемого аргумента.
А в этом месте пока ничего и не надо знать. Знать надо к моменту определения реализации этой функции.
1
skvor
640KB мне хватило на всё.
118 / 49 / 2
Регистрация: 07.06.2009
Сообщений: 442
27.08.2011, 18:51  [ТС] #10
Спасибо. Перенес тело method прямо в описание c1 компилятор сразу выдал аж две ошибки.
test.cpp:34: error: 'param' has incomplete type
test.cpp:29: error: forward declaration of 'struct c2'
Вот с 34-ой строкой
C++
1
int method(c2 param){ return param.param; }
всё понятно - невозможно скомпилировать функцию без реального знания типа.
А почему ошибка в 29-ой (class c2;) от того, что изменили 34-ую?
0
grizlik78
Эксперт С++
1911 / 1443 / 112
Регистрация: 29.05.2011
Сообщений: 3,000
27.08.2011, 18:53 #11
Ну это компилятор просто показал место, откуда взялся этот незавершённый тип. Подсказка, типа
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.08.2011, 18:53
Привет! Вот еще темы с ответами:

Описать класс "Контейнер" как объект, предназначенный для транспортировки классов "Строительных блоков" - C++
1. Опишите класс "Строительный блок", описывающий габариты и массу блока прямоугольной формы. Данные класса: Габариты, масса. Методы...

Иерархия классов "список"-"очередь", вызов метода через класс интерфейс - C++
Есть небольшая иерархия классов, контейнер (список) для хранения объектов каждого класса, контейнер (очередь) с указателями на объект...

Реализовать связь классов "телефонная книга" и родительский класс "телефонный номер" - C++
Суть проблемы:есть дочерний класс "телефонная книга" и родительский класс "телефонный номер". В классе "телефонная книга" к заданной...

Проблема с перегрузкой операторов "+" и "+=" для классов Point и Circle - C++
Есть класс Point (элементы данных x,y) и класс Circle (элементы данных р(типа Point),r). Их заголовочные файлы: class Point { ...


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

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

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