2 / 2 / 0
Регистрация: 14.02.2013
Сообщений: 99
|
||||||||||||||||||||||||||
1 | ||||||||||||||||||||||||||
Классы. Фигуры. Наследование10.12.2013, 00:46. Показов 6069. Ответов 21
Метки нет (Все метки)
Создан абстрактный класс Point - ось в трёхмерном пространстве с начальной точкой и высотой.
Производный от него Параллелепипед - принимает два параметра (координаты Х У) для установки противоположной начальной точкой вершиной. Производный от Параллелепипеда - Тетраэдр - принимает ещё два параметра (координаты Х У третьего угла). Проблема: как установить все четыре параметра в Тетраэдре, если виртуальная функция установки параметров принимает только два значения. Так же имеются фигуры Конус, Цилиндр, Пирамида, тут проблем нет. Помогите, пожалуйста!
0
|
10.12.2013, 00:46 | |
Ответы с готовыми решениями:
21
Фигуры, классы и наследование Наследование, базовые классы и производные классы Классы и наследование (Создать класс 3D фигура, и производные классы шар, конус, цилиндр и куб. Создать функцию вычисления объёма.) Классы, наследование |
All rights reserved.
93 / 83 / 24
Регистрация: 03.08.2013
Сообщений: 258
|
|
10.12.2013, 00:57 | 2 |
Почему у вас ВСЕ функции виртуальные?
0
|
2 / 2 / 0
Регистрация: 14.02.2013
Сообщений: 99
|
|
10.12.2013, 01:04 [ТС] | 4 |
Потому что я их переопределяю в каждом классе.
0
|
2 / 2 / 0
Регистрация: 14.02.2013
Сообщений: 99
|
|
10.12.2013, 01:06 [ТС] | 6 |
Да, такой вариант я рассматривал, но плохо то, что, допустим, для того же цилиндра функций setParameter мне нужно установить лишь радиус, тогда придётся просто посылать оставшиеся ПЯТЬ переменных в трубу. Хотелось бы избежать и сделать как-то иначе.
0
|
All rights reserved.
93 / 83 / 24
Регистрация: 03.08.2013
Сообщений: 258
|
|
10.12.2013, 01:06 | 7 |
Я к чему, сделайте в базовом классе виртуальную функцию с некоторым именем, а у потомков можете запросто эти функции переопределить под их собственные нужды. Компилятор сам разберётся, какую функцию вызвать в зависимости от типа вызывающего объекта.
0
|
2 / 2 / 0
Регистрация: 14.02.2013
Сообщений: 99
|
|
10.12.2013, 01:07 [ТС] | 8 |
Да, детали синтаксиса, думаю, это не очень страшно.
0
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,514
|
|
10.12.2013, 01:08 | 9 |
не понял?
а высота? центр окружности? Добавлено через 1 минуту ну как сказать потом забудешь что Point это ось, или кто другой с твоим листингом работать будет
0
|
2 / 2 / 0
Регистрация: 14.02.2013
Сообщений: 99
|
|
10.12.2013, 01:09 [ТС] | 10 |
Именно, я понимаю! Но ведь у переопределяемых функций количество параметров должно совпадать с количеством параметров у исходной виртуальной функции. Вот в чём дело...
0
|
2 / 2 / 0
Регистрация: 14.02.2013
Сообщений: 99
|
|
10.12.2013, 01:13 [ТС] | 12 |
центр окружности и высота устанавливаются в классе Point, Цилиндр их наследует, так что из дополнительных параметров - только радиус.
Добавлено через 2 минуты Но ведь у переопределяемых функций количество параметров должно совпадать с количеством параметров у исходной виртуальной функции. Вот в чём дело... (
0
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,514
|
|
10.12.2013, 01:15 | 13 |
ты видать не совсем разобрался с наследованием
класс это описание как например структура и наследует он члены класса а объект это уже физическая сущность и как ты создавая объект цилиндр задашь центр окружности и высоту объект класса Point у тебя не создается
0
|
All rights reserved.
93 / 83 / 24
Регистрация: 03.08.2013
Сообщений: 258
|
|
10.12.2013, 01:18 | 14 |
Лев Борисов, вы храните часть данных в базовом классе, часть в родительском, часть в своём. Если вы приняли 6 параметров координат, 4 из них уйдут в родительский класс, две останутся в классе объекта. Родительский, в свою очередь, себе оставит две координаты, но сначала первые две передаст в базовы класс. Когда базовый класс установит все координаты, управление перейдёт в родительский класс. Тот отработает, передаст управление обратно классу вызывающего объекта, чтобы тот установил оставшиеся координаты. И вообще, зачем делать виртуальной set-функцию?
1
|
2 / 2 / 0
Регистрация: 14.02.2013
Сообщений: 99
|
||||||
10.12.2013, 01:20 [ТС] | 15 | |||||
Я понял так, что конструктор Cylinder вызывает конструктор Point с инициализаторами элементов и задаёт начальное значение радиуса
0
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,514
|
||||||
10.12.2013, 01:25 | 16 | |||||
вот примерно так это выглядит
объект ob две переменных a b ob_a ob_b объект oc три переменных a b c oc_a oc_b oc_c это все разные переменные они лежат в разных участках памяти и если ты присвоишь oa_a допустим 5 то ob_a и oc_a не будут автоматически равны 5 им придется присваивать свои значения Добавлено через 2 минуты правильно только в данном случае Point это не отдельный объект а часть класса Cylinder
1
|
2 / 2 / 0
Регистрация: 14.02.2013
Сообщений: 99
|
|
10.12.2013, 01:27 [ТС] | 17 |
Что-то я теперь даже в ступор вошёл, как это всё с полиморфизмом соединить, его ведь мне тоже надо использовать.
0
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,514
|
|
10.12.2013, 01:35 | 18 |
легко
только нужно понять что есть наследование пример есть класс человек у него есть члены класса (поля) возраст рост ну и еще что нибудь есть класс наследник мужчина он наследует все члены класса человек и добавляет свои например длинна бороды а есть объекты класса мужчина Лев Борисов, и ValeryS у нас есть все свойства(члены класса) класса мужчина но значения в них разные и есть только два объекта, не создается еще два объекта класса человек просто мы одновременно и мужчина и человек подвид, так сказать
0
|
2 / 2 / 0
Регистрация: 14.02.2013
Сообщений: 99
|
|
10.12.2013, 01:44 [ТС] | 19 |
Да, это понятно, но посмотрите ещё раз, пожалуйста, на код - разве я делаю как-то иначе? Ось - добавляю угол с двумя координатами - получаю параллелепипед.
К параллелепипеду добавляю ещё один угол и получаю треугольник в основании, то бишь тетраэдр. Мне не стоит использовать setPoint, устанавливая и "базовые" значения через setParametr? Или я что-то снова не так понял? Значит, никак нельзя, используя функцию setParamtr из Параллелепипеда, установить эти параметры в Тетраэдре???
0
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,514
|
|
10.12.2013, 01:52 | 20 |
да
все параметры для фигуры должны вводится одной функцией вот этого не понял точка 0,0 высота 10 я ввожу 5,5 разве у меня получится параллелепипед? и если введу потом 2,2 разве будет тетраэдр? да и трудно как то из прямоугольников треугольники сделать
1
|
10.12.2013, 01:52 | |
10.12.2013, 01:52 | |
Помогаю со студенческими работами здесь
20
Классы и наследование c++ Классы и их наследование Классы. Наследование Классы. Наследование Классы, наследование Классы и наследование Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |