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

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

Войти
Регистрация
Восстановить пароль
 
 
zEg0r
0 / 0 / 0
Регистрация: 26.03.2010
Сообщений: 16
#1

Наследование - C++

19.02.2011, 12:47. Просмотров 999. Ответов 16
Метки нет (Все метки)

Используя механизм наследования реализовать иерархию: Окружность –> Цилиндр. У базового класса присутствуют методы: конструктор, вычисление площади, вывод площади.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.02.2011, 12:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Наследование (C++):

Заменить наследование классов на наследование интерфейсов - C++
#include <iostream> #include <assert.h> using namespace std; int people_on_base = 100; int vehicles_on_base = 100; double...

Наследование - C++
char* Texts :: SetBit() { char a; int b; cout << "Получаем битовую строку" << endl; cin >> a; b = strlen(a);...

наследование - C++
Пытаюсь разобраться в наследовании Есть класс class File { public: struct comp { char num; // Имя переменной char st;...

Наследование - C++
Всем привет. Может кто нибудь подсказать с чего начать при создании класса для работы с файлами на подобии ostream( а точнее как правильно...

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

Наследование?! - C++
привет всем. Есть класс Circle c1, c2, c3 Нужно реализовать через наследование класс множество, прошу помочь как он будет выглядеть...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Qwerty_coder
29 / 29 / 2
Регистрация: 14.12.2009
Сообщений: 79
19.02.2011, 13:26 #2
zEg0r, и в чем конкретно у вас сложности? О_о
silent_1991
19.02.2011, 13:28
  #3

Не по теме:

Уже писал в другой такой теме, но повторюсь - вот принципиально не буду наследовать цилиндр от окружности о_О. Ну какое это наследование? Тогда давайте здание от фундамента наследовать.

lotos_47
0 / 0 / 0
Регистрация: 02.03.2010
Сообщений: 29
19.02.2011, 13:52 #4
мне было бы тоже интересно решение
rangerx
19.02.2011, 14:06
  #5

Не по теме:

Цитата Сообщение от silent_1991 Посмотреть сообщение
Уже писал в другой такой теме, но повторюсь - вот принципиально не буду наследовать цилиндр от окружности о_О. Ну какое это наследование? Тогда давайте здание от фундамента наследовать.
Ну, закрытое тут можно использовать в принципе. Но иерархией это конечно сложно будет назвать )

zEg0r
0 / 0 / 0
Регистрация: 26.03.2010
Сообщений: 16
19.02.2011, 16:12  [ТС] #6
задание дал преподователь, написано слово в слово.
silent_1991
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
19.02.2011, 16:18 #7
Цитата Сообщение от rangerx Посмотреть сообщение
Но иерархией это конечно сложно будет назвать
В том-то и дело, что мы практически никаких прелестей наследования использовать не сможем)))

Цитата Сообщение от zEg0r Посмотреть сообщение
задание дал преподователь, написано слово в слово
А это и так понятно, просто преподаватель, мягко говоря, некомпетентен, раз хочет увидеть такую иерархию и собирается ставить за неё отличные оценки.
no0ker
101 / 88 / 4
Регистрация: 17.12.2010
Сообщений: 416
19.02.2011, 16:48 #8
silent_1991, не могли бы вы пояснить, почему нельзя строить такую иерархию?

Добавлено через 1 минуту
и еще глупый вопрос... а можно наследовать от цилиндра - окружность? то есть окружность - цилиндр с высотой ноль. =)
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
19.02.2011, 16:50 #9
Цитата Сообщение от silent_1991 Посмотреть сообщение
В том-то и дело, что мы практически никаких прелестей наследования использовать не сможем)))
Можно воспользоваться реализацией метода вычисления площади окружности для вычислении объёма цилиндра. И коль уж речь идёт о наследовании(хоть можно обойтись и без него) использовать следует именно закрытое. Но судя по наличию в задании слова "иерархия" наследование здесь подразумевается именно открытое... В общем, боюсь что всётаки придётся цилиндру стать разновидностью окружности ))
silent_1991
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
19.02.2011, 16:56 #10
no0ker, потому что цилиндр никак не является наследником круга. В принципе можно построить композицию, где в классе цилиндр есть поле "Основание", представляемое экземпляром класса "Круг", и второе поле "Высота". Но наследовать - увольте, круг и цилиндр - абсолютно разные вещи, круг надо наследовать от двумерной фигуры, а цилиндр - от трёхмерной фигуры, которые, в свою очередь, стоит унаследовать от класса "Фигура".

Добавлено через 1 минуту
rangerx, да тут вообще лучше без наследования обойтись, а использовать, как я уже предложил, композицию.
Цитата Сообщение от rangerx Посмотреть сообщение
придётся цилиндру стать разновидностью окружности
Этому не бывать!
no0ker
101 / 88 / 4
Регистрация: 17.12.2010
Сообщений: 416
19.02.2011, 17:01 #11
silent_1991, а окружность - как разновидность цилиндра? =)
silent_1991
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
19.02.2011, 17:03 #12
no0ker, а арбуз - как разновидность гуталина?
Kastaneda
19.02.2011, 17:05
  #13

Не по теме:

Помнится на форуме было задание круг от треугльника наследовать
У нас в следующем семестре будет С++, на установочной лекции, на сколько я понял, преподователь реально разбирается в С++, я считаю, что нам повезло. Это я к чему - офигеть, если препод разбирается в предмете - значит повезло.

silent_1991
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
19.02.2011, 17:08 #14
Цитата Сообщение от Kastaneda Посмотреть сообщение
офигеть, если препод разбирается в предмете - значит повезло
Шикарно!

Добавлено через 29 секунд
Цитата Сообщение от Kastaneda Посмотреть сообщение
круг от треугльника наследовать
А это ещё шикарнее!
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
19.02.2011, 17:11 #15
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
#include <cmath>
#include <cassert>
#include <iostream>
 
class Circle{
public:
   Circle( double r ) : m_R(r) { assert( m_R>0 ); } 
   double getR() const { return m_R; }
   double getSquare() const { return m_R*m_R*M_PI; }
private:
   double m_R; 
};
 
class Cylinder{
public:
   Cylinder( double r, double h ) : m_h(h), m_c(r) { assert(m_h>0); }
   double getR() const { return m_c.getR(); }
   double getH() const { return m_h; }
   double getVolume() const { return m_c.getSquare() * m_h; }
private:
   double m_h;
   Circle m_c;    
};
 
int main(){
   Cylinder cyl( 5, 10 );
   std::cout << "volume = " << cyl.getVolume(); 
}
это с агрегированием
почему тут не стоит применять наследование? да потому что по иерархии наследования должна происходить специализация сущности от абстрактной к реальной, тут вообще никакой специализации нет
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.02.2011, 17:11
Привет! Вот еще темы с ответами:

наследование - C++
Как наследовать классы с использованием виртуальных функций? Можете привести пример?

наследование в С++ - C++
Добрый вечер. относительно недавно мною была получена задача, а точнее несколько задач в одной...И как это ни печально звучит, проблемы...

наследование - C++
помогите пожалуйсто дописать класс многоугольников , и рисовать на монитор с помощью mfc , заранее благодарен... class figure{ public: ...

Наследование в C++ - C++
Прошу помощи, ибо С++ не моё, а лабораторные работы девушке сдавать надо: Создать 1 базовый класс и несколько производных. Все...


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

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

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