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

Class Complex - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
monoxpom
0 / 0 / 0
Регистрация: 23.04.2009
Сообщений: 13
08.05.2011, 11:59     Class Complex #1
Товарищи Программисты, проблема более теоритического характера, чем практического. А проблема в следующем: есть класс комплексное число, какой класс логичнее от него наследовать, чтобы не слишком заумно, но изящно и с демонстрацией применения виртуальных функций и тп? Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.05.2011, 11:59     Class Complex
Посмотрите здесь:

C++ матрица типа complex
C++ Стандартный класс complex.
C++ Класс Complex
C++ Класс complex
Реализовать класс Complex C++
valarray and complex C++
C++ Работа с Complex
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16935 / 5340 / 328
Регистрация: 30.03.2009
Сообщений: 14,354
Записей в блоге: 26
08.05.2011, 17:26     Class Complex #2
На мой взгляд класс комплексных чисел вообще не подходит для демонстрации наследования, не говоря уж о виртуальных методах
HighPredator
 Аватар для HighPredator
5385 / 1768 / 323
Регистрация: 10.12.2010
Сообщений: 5,233
Записей в блоге: 3
08.05.2011, 17:47     Class Complex #3
Я бы к такому вопросу подошел с точки зрения математики. Множество комплексных чисел содержит в себе множество действительных. Исходя из этого, я бы пронаследовал класс действительных чисел.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16935 / 5340 / 328
Регистрация: 30.03.2009
Сообщений: 14,354
Записей в блоге: 26
08.05.2011, 17:54     Class Complex #4
Predator_2004, то, что ты прелагаешь - это полная ерунда. Как минимум по следующей причине. Отношение "содержит" НЕ является наследованием. Наследование - это отношение "является"
HighPredator
 Аватар для HighPredator
5385 / 1768 / 323
Регистрация: 10.12.2010
Сообщений: 5,233
Записей в блоге: 3
08.05.2011, 17:58     Class Complex #5
Может неточно выразился. Действительные числа являются частным случаем комплексных, поэтому возможно наследование. Тем более что говорил в посте я о множествах, а не объектах.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16935 / 5340 / 328
Регистрация: 30.03.2009
Сообщений: 14,354
Записей в блоге: 26
08.05.2011, 18:05     Class Complex #6
Частный случай - это тоже не наследование, а скорее обратное действие. И не совсем понял, при чём тут можества, когда автор про классы спрашивал.

Пример наследования это базовый класс "автомобиль" и производные классы "автомобиль ауди", "автомобиль мерседес" и т.п. Каждый из производных классов строго является понятием базового класса
HighPredator
 Аватар для HighPredator
5385 / 1768 / 323
Регистрация: 10.12.2010
Сообщений: 5,233
Записей в блоге: 3
08.05.2011, 18:11     Class Complex #7
Тут тоже самое: родитель Комплексное Число, потомок Действительное Число (комплексная часть - ноль, можно даже математику не переопределять). Все как в вашем примере. Если Ауди, Мерс, Жигули - автомобили, то действительные, иррациональные, натуральные числа можно представить в виде потомков комплексного числа. Так логичнее на мой взгляд.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16935 / 5340 / 328
Регистрация: 30.03.2009
Сообщений: 14,354
Записей в блоге: 26
08.05.2011, 18:20     Class Complex #8
Я не математик, а потому твою идею сразу не уловил. Т.е. ты считаешь, что все числа, условно говоря, являются комплексными, при этом действительные числа являются подмножеством (частным случаем) комплексных. Сие есть математический подход.

Программерское понятие наследования это несколько другое. Частный случай - НЕ есть наследование. Безуслоно можно представить действительное число в виде производного класса откомплексного числа. Точно так же можно ввести понятие "напряжение в вольтах" и через typdef реализовать понятие "масса в килограмах". Оба этих примера будут компилироваться и работать, ибо компилятору всё равно, что и как ты делаешь. Но идеологически эти примеры неправильные и кривые, потому что неверно задают соотношения между понятиями

С программерской точки зрения комплексное число СОСТОИТ из двух действительных чисел (действительная и мнимая части). И твой пример ну никак не подходит для демонстрации программерского понятия "наследование"
slice
32 / 75 / 4
Регистрация: 04.11.2010
Сообщений: 249
08.05.2011, 18:29     Class Complex #9
Evg прав.
HighPredator
 Аватар для HighPredator
5385 / 1768 / 323
Регистрация: 10.12.2010
Сообщений: 5,233
Записей в блоге: 3
08.05.2011, 18:29     Class Complex #10
В вопросе от автора сказано две вещи:
1) есть класс комплексного числа
2) какой класс от него логичнее наследовать
Считаю, что в рамках вопроса предложил вполне приличный вариант ответа.
Кстати
Цитата Сообщение от Evg Посмотреть сообщение
С программерской точки зрения комплексное число СОСТОИТ из двух действительных чисел
упомянутые вами действительные числа являются типами данных. К тому же преподаватели в ВУЗах, обожающие данную задачу, как правило имеют 1-2 степени по физ-мату и такое решение задачи будет вполне приемлимо.
Хорошо. Вам моя точка зрения не импонирует. Как бы вы выполнили наследование, учитывая, что мы имеем комплексное число, а значит, следуя логике, не должны в итоге получить класс - доска (к примеру)?
Байт
 Аватар для Байт
14338 / 9169 / 1321
Регистрация: 24.12.2010
Сообщений: 16,775
08.05.2011, 18:31     Class Complex #11
У класса TReal могут появиться собственные методы типа bool Greater(x).
slice
32 / 75 / 4
Регистрация: 04.11.2010
Сообщений: 249
08.05.2011, 18:36     Class Complex #12
Predator_2004, смотри. Логично что у класса компл. числа есть методы setReal, setImg? Тогда получится что у действ. числа тоже будет метод setImg. А нахрена?
HighPredator
 Аватар для HighPredator
5385 / 1768 / 323
Регистрация: 10.12.2010
Сообщений: 5,233
Записей в блоге: 3
08.05.2011, 18:48     Class Complex #13
На худой конец можно сделать setImg приватным, т.к. он специфичен только для этого класса.
slice
32 / 75 / 4
Регистрация: 04.11.2010
Сообщений: 249
08.05.2011, 19:09     Class Complex #14
Цитата Сообщение от Predator_2004 Посмотреть сообщение
На худой конец можно сделать setImg приватным, т.к. он специфичен только для этого класса.
ты несешь какую-то ахинею. Советую тебе не писать в этой теме дабы не выглядеть глупо.
HighPredator
 Аватар для HighPredator
5385 / 1768 / 323
Регистрация: 10.12.2010
Сообщений: 5,233
Записей в блоге: 3
08.05.2011, 20:41     Class Complex #15
Цитата Сообщение от slice Посмотреть сообщение
ты несешь какую-то ахинею
Для начала, ахинея - это делать сеттеры для переменных, не являющихся указателями и использующихся в открытую.

Добавлено через 23 минуты
Если на то пошло, то имеет смысл для комплексного числа делать один сеттер, принимающий два формальных параметра (действ и компл части), а для наследуемого действительного числа сделать такой же виртуальный, но с приемом одного параметра. Тем самым выполним требование топикстартера о наличии виртуальных функций. И да, с приватностью погорячился.
almazsr
232 / 169 / 7
Регистрация: 13.11.2010
Сообщений: 425
08.05.2011, 20:57     Class Complex #16
Predator_2004, уж скорее наследовать класс комплексные числа от действительных, там как раз можно сделать виртуальными методы элементарных функций и операции арифметические. Наследуется сложное от простого ведь, а не наоборот. К тому же если таки унаследовать действительные числа от комплексных, то создаваемый объект будет содержать поле мнимой части - которое в действительных числах никогда не будет использоваться. И зря будет память занимать. Не вариант!
Можно попробовать как расширение комлпексных чисел - гиперкомплексные. Но я с ними мало знаком.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16935 / 5340 / 328
Регистрация: 30.03.2009
Сообщений: 14,354
Записей в блоге: 26
08.05.2011, 21:03     Class Complex #17
Цитата Сообщение от Predator_2004 Посмотреть сообщение
Вам моя точка зрения не импонирует.
Если вернуться к автомобилям, то базовый класс определяет свойства, ОБЩИЕ для всех элементов класса "автомобиль" и его производных классов. А производные классы типа "автомобиль ауди" определяет свойства, ИНДИВИДУАЛЬНЫЕ для класса "автомобиль ауди", которых нет в классе "автомобиль". В случае с наследованием класса "действительное" число от класса "комплексное" число никаких новых индивидуальных свойств не появляется. Поэтому сие НЕ есть наследование

Цитата Сообщение от Predator_2004 Посмотреть сообщение
Как бы вы выполнили наследование, учитывая, что мы имеем комплексное число, а значит, следуя логике, не должны в итоге получить класс - доска (к примеру)?
В трёх чтениях постановку вопроса так и не понял. Возможно, из-за того, что я не математик и не философ

Добавлено через 1 минуту
Цитата Сообщение от almazsr Посмотреть сообщение
Predator_2004, уж скорее наследовать класс комплексные числа от действительных
Это тоже не правильно. Комплексное число по отношению к действительному имеет отношение "содержит", но не "является". Т.е. класс комплексного числа должен СОДЕРЖАТЬ в себе понятие действительного числа, но на НАСЛЕДОВАТЬ его

Добавлено через 1 минуту
Цитата Сообщение от slice Посмотреть сообщение
ты несешь какую-то ахинею
Он сразу сказал, что речь ведёт с позиции математика. На мой взгляд это хорошая возможность понять свои собственные знания. А именно, показать, почему он не прав. Правда это всё уже оффтоп и, возможно, имеет смысл вынести в отдельную тему
almazsr
232 / 169 / 7
Регистрация: 13.11.2010
Сообщений: 425
08.05.2011, 21:27     Class Complex #18
Цитата Сообщение от Evg Посмотреть сообщение
Это тоже не правильно. Комплексное число по отношению к действительному имеет отношение "содержит", но не "является". Т.е. класс комплексного числа должен СОДЕРЖАТЬ в себе понятие действительного числа, но на НАСЛЕДОВАТЬ его
Ну тогда просто интерфейс "число" INumber какой-нибудь с арифметическими операциями общими для всех чисел и элементарными функциями.
slice
32 / 75 / 4
Регистрация: 04.11.2010
Сообщений: 249
08.05.2011, 21:44     Class Complex #19
Попытка решить эту задачу сродни попытке натянуть презерватив на кактус. И все ради того, чтоб удовлетворить прихоть преподавателя, ни черта не шарящего в ООП.

Добавлено через 6 минут
(c) slice
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.05.2011, 21:52     Class Complex
Еще ссылки по теме:

Тип complex C++
Программа (class Complex) на неуправляемом языке c++ C++
C++ Библиотека <complex>
C++ Преобразовать string в complex
Класс Complex C++

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

Или воспользуйтесь поиском по форуму:
monoxpom
0 / 0 / 0
Регистрация: 23.04.2009
Сообщений: 13
08.05.2011, 21:52  [ТС]     Class Complex #20
Цитата Сообщение от slice Посмотреть сообщение
Попытка решить эту задачу сродни попытке натянуть презерватив на кактус. И все ради того, чтоб удовлетворить прихоть преподавателя, ни черта не шарящего в ООП.

Добавлено через 6 минут
(c) slice
Первая фраза весьма четко охарактеризовала мое отношение к данной задаче. Всем участникам диспута спасибо. И все-таки, чтобы было чем мне заняться, а не с пустыми руками идти на занятия, скажите первый приходящий на ум пример наследования.
Yandex
Объявления
08.05.2011, 21:52     Class Complex
Ответ Создать тему
Опции темы

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