| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Класс. Наследование. |
| Автор: ioManip 13.10.2013, 05:03 | ||||||||
| Всем привет! Мне нужно прояснить одну ситуацию! У меня есть 3 файла: main.cpp rectangle.cpp rectangle.h Суть проблемы в том, что при подсчете объемма параллепипеда, значение площади всегда берется из конструктора по умолчанию класса Rectangle. То есть смотрите, если закоментировать вот эти строчки:
то значение площади все равно будет 50. А по идеи должно же быть 30 ? main.cpp
rectangle.cpp
rectangle.h
|
| Автор: akizelokro 13.10.2013, 07:48 |
| Ничего не понял. Первый прямоугольник у тебя со сторонами, которые ты задаешь при вызове конструктора с указанием сторон. Второй создаётся со значениями по умолчанию. Если ты уберёшь три строчки, в которых выводишь значение площади, то само значение площади не изменится. Просто ты отключаешь вывод значения. |
| Автор: ioManip 13.10.2013, 08:25 |
| akizelokro, Так я комментирую не только вывод, но и создание самого объекта. Но результат все равно 50. |
| Автор: akizelokro 13.10.2013, 08:52 | ||
| Ничего не понимаю. Если ты комментируешь создание объекта (не создаёшь его), то и площади у него не должно быть, раз нет самого объекта. Или ты про первый прямоугольник rectOne, что у него площадь 50, а не 30? Понял, ты про объём параллелепипеда. Ну так у тебя нет конструктора вида
вызывая который, ты бы создавал параллелепипед на основе уже созданного прямоугольника с произвольной длиной сторон. А когда ты создаешь параллелепипед ,указывая там члены a и b, они не изменяют a и b из базового класса. Просёк, что ты хотел сказать, вообщем. У тебя Parallpiped::a совсем не то, что Parallpiped::Rectangle::a. |
| Автор: ioManip 15.10.2013, 01:43 | ||
| Я ничего не понял! UPD: Вообщем все решил вот так
akizelokro Возможно, Вы именно это имели ввиду! UPD2 А хотя подождите, вроде не так |
| Автор: baldina 15.10.2013, 03:26 | ||
плохое решение: параллелепипед это не прямоугольник. да и значения
не верны для Parllepiped, и переопределить не получится, т.к. не виртуальные если уж хочешь общности, создай параллелепипед в N-мерном пространстве а если хочешь использовать повторно то полезное, что есть в прямоугольнике, то параллелепипед включает прямоугольник как основание |
| Автор: akizelokro 15.10.2013, 07:33 | ||
Можно и так. Просто тема немного в другом, при наследовании, ты должен понимать, переменная а, член класса Rectangle, при наследовании будет наследоваться классом Parllepiped. Но она не та переменная a, которую ты определяешь в классе Parllepiped (в твоей модели у тебя две переменные a, одна член класса Parllepiped, а вторая переменная a наследуется из класса Rectangle). Если ты хочешь, чтобы у тебя была одна переменная a, то выбрось определение из Parllepiped. |
| Автор: o2n3e 16.10.2013, 08:30 |
Модератор: Сообщение скрыто. |