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

Реализация отношений между классами is-a, has-a, uses-a в С++ - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 42, средняя оценка - 4.74
Konstantin_D
 Аватар для Konstantin_D
14 / 14 / 2
Регистрация: 21.07.2011
Сообщений: 89
19.03.2012, 13:56     Реализация отношений между классами is-a, has-a, uses-a в С++ #1
Где можно найти информацию по отношениям между объектами классов is-a, has-a, uses-a и и их реализация средствами С++. В инете очень мало информации. Особенно о uses-a. Нашел слабенькое описание вопроса в книге Дж. Коплиена "Программирование на C++". Описано сложным языком, а по uses-a почти ничего .
Как это отношение можно реализовать? Или где это описано человеческим языком?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.03.2012, 13:56     Реализация отношений между классами is-a, has-a, uses-a в С++
Посмотрите здесь:

C++ Реализация метода отношений случайных нормальных величин
C++ Организация общения между классами
C++ Отношения между классами и объектами
Реализация отношений между объектами C++
Передача данных между классами C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
19.03.2012, 16:37     Реализация отношений между классами is-a, has-a, uses-a в С++ #2
Цитата Сообщение от Konstantin_D Посмотреть сообщение
отношениям между объектами классов is-a, has-a, uses-a
А что это такое вообще?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
19.03.2012, 16:54     Реализация отношений между классами is-a, has-a, uses-a в С++ #3
is-a - public наследование.
has-a - агрегирование (создается в классе).
use-a - агрегирование (приходят извне, доступны не только в классе).
Konstantin_D
 Аватар для Konstantin_D
14 / 14 / 2
Регистрация: 21.07.2011
Сообщений: 89
19.03.2012, 17:00  [ТС]     Реализация отношений между классами is-a, has-a, uses-a в С++ #4
Меня такой ответ от эксперта С++ скорее порадовал, чем огорчил
Значит, эта фигня никому не нужна.
Это был вопрос из тестов по проверке знаний С++ на собеседовании.
В инете найти много не удалось, но:
отношение is-a - "является объектом типа" - при public наследовании объект производного класса является также и объектом базового класса и т.д.
отношение has-a - "имеет объект" - приватное наследование; создание класса, элемент которого являются объектами другого класса и т.п.
Информации мало. Особенно по "uses-a". Думаю, это вложенные классы, типа как узел в списке.
А нужно рассказать как эти отношения можно реализовать и какими средствами С++. Почему то не является этим и т.п.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
19.03.2012, 17:12     Реализация отношений между классами is-a, has-a, uses-a в С++ #5
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#include <iostream>
#include <string>
 
// IS-A
 
class Person
{
public:
   Person(const std::string& nm):name(nm)
   {
   }
   const std::string getName() const
   {
      return name;
   }
private:
   std::string name;
};
 
class Derived : public Person
{
public:
   Derived(const std::string& nm, const std::string& tmp):
   Person(nm), temp(tmp)
   {
   }
   const std::string getTemp() const
   {
      return temp;
   }
private:
   std::string temp;
};
 
void test_is_a()
{
   Derived der("Vasya", "Temp");
   std::cout << der.getName() << " - " << der.getTemp() << std::endl;
}
 
// HAS-A
 
class Engine
{
public:
   const std::string getName() const
   {
      return "Engine";
   }
};
 
class Car
{
public:
   const std::string getEngineName() const
   {
      return eng.getName();
   }
private:
   Engine eng;
};
 
void test_has_a()
{
   Car car;
   std::cout << car.getEngineName() << std::endl;
}
 
// USES-A
 
class Pilot
{
public:
   const std::string getName() const
   {
      return "Pilot";
   }
};
 
class Plane
{
public:
   Plane(const Pilot& p):pil(p)
   {
   }
   const std::string getPilotName() const
   {
      return pil.getName();
   }
private:
   const Pilot& pil;
};
 
void test_uses_a()
{
   Pilot pil;
   Plane pl(pil);
   std::cout << pl.getPilotName() << std::endl;
}
 
int main()
{
   test_is_a();
   test_has_a();
   test_uses_a();
}
http://liveworkspace.org/code/1d2088...d32dc06449236e
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
19.03.2012, 17:25     Реализация отношений между классами is-a, has-a, uses-a в С++ #6
Konstantin_D, я такой терминологии даже в UML не встречал Думал, что-то особенное, а оно оказывается проще некуда.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.02.2013, 15:40     Реализация отношений между классами is-a, has-a, uses-a в С++
Еще ссылки по теме:

C++ Реализация одно-х списков классами
C++ Взаимодействие между классами
Связь между 2 классами C++

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

Или воспользуйтесь поиском по форуму:
Lonkar
5 / 0 / 1
Регистрация: 10.02.2013
Сообщений: 7
10.02.2013, 15:40     Реализация отношений между классами is-a, has-a, uses-a в С++ #7
Тест расширили
Подскажите, пожалуйста, что за отношения такие get-a и ref-a?
Yandex
Объявления
10.02.2013, 15:40     Реализация отношений между классами is-a, has-a, uses-a в С++
Ответ Создать тему
Опции темы

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