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

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

Войти
Регистрация
Восстановить пароль
 
 
Лев Борисов
2 / 2 / 0
Регистрация: 14.02.2013
Сообщений: 99
#1

Классы. Фигуры. Наследование - C++

10.12.2013, 00:46. Просмотров 1337. Ответов 21
Метки нет (Все метки)

Создан абстрактный класс Point - ось в трёхмерном пространстве с начальной точкой и высотой.
Производный от него Параллелепипед - принимает два параметра (координаты Х У) для установки противоположной начальной точкой вершиной.
Производный от Параллелепипеда - Тетраэдр - принимает ещё два параметра (координаты Х У третьего угла).

Проблема: как установить все четыре параметра в Тетраэдре, если виртуальная функция установки параметров принимает только два значения. Так же имеются фигуры Конус, Цилиндр, Пирамида, тут проблем нет.

Помогите, пожалуйста!

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Point {
// Спецификаторы доступа к элементам
public:                                         // Доступны при любом обращении программы к объекту класса Time
                                                // Открытые методы / Открытый интерфейс услуг класса / Прототипы
                                                // Будут использоваться "клиентами" класса
    Point(int = 0, int = 0, int = 0, int = 0);  // Конструктор
                                                // Инициализирует данные-элементы объекта этого класса
    void setPoint (int, int, int, int);         // "Set" - установить
    void greet() const;                         // Сообщение о введении начальных параметров
    virtual void greet_2() const = 0;           // Чисто виртуальная функция печати предложения ввода параметров
    virtual void print() const = 0;             // Чисто виртуальная функция печати имени класса
    virtual void setParameter(int, int) = 0;    // Чисто виртуальная функция установки параметров
    virtual float getArea() const = 0 ;         // Чисто виртуальная функция подсчёта площади
protected:                                      // Доступны для производных классов
    int x0, y0, z0, high;                       // Координаты начальной точки
};                                              // Высота
C++
1
2
3
4
5
6
7
8
9
10
class Parallelepiped : public Point {   // Открытое наследование (Тип наследования)
public:
    Parallelepiped(int = 0, int = 0, int = 0, int = 0, int = 0, int = 0);
    virtual void print() const;
    virtual void greet_2() const;
    virtual void setParameter(int, int);// Установка противоположной вершины
    virtual float getArea() const;      // Вычисление площади
protected:                              // Доступны только функциям-элементам (методам) этого класса
    int x1, y1;
};
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
// PARALLELEPIPED.CPP
// Функции-элементы / Методы класса Parallelepiped
#include "StdAfx.h"
#include "iostream"
#include <cmath> 
#include "Parallelepiped.h"
 
using namespace std; 
 
/* Конструктор Parallelepiped вызывает конструктор Point с инициализаторами элементов,
затем инициализирует координаты второй точки */
Parallelepiped::Parallelepiped(int x_1, int y_1, int x, int y, int z, int h)
: Point(x, y, z, h)                             // Вызов конструктора базового класса
{ x1 = x_1; y1 = y_1; }
 
void Parallelepiped::print() const
{ cout << "\n\tПараллелепипед"; }
 
void Parallelepiped::greet_2() const
{ cout << "\tВведите координаты противоположной вершины: "; }
 
void Parallelepiped::setParameter(int x_1, int y_1)
{ x1 = x_1; y1 = y_1; }
 
// Вычисление площади класса Parallelepiped
float Parallelepiped::getArea() const
{ return abs((x1 - x0) * (y1 - y0)); }
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// TETRAHEDRON.H
// Определение класса Tetrahedron
 
#ifndef TETRAHEDRON_H
#define TETRAHEDRON_H
#include "Parallelepiped.h"
 
class Tetrahedron : public Parallelepiped { 
                                            // Открытое наследование (Тип наследования)
public:
    Tetrahedron(int = 0, int = 0, 
                int = 0, int = 0, 
                int = 0, int = 0, 
                int = 0, int = 0);
    virtual void print() const;
    virtual void greet_2() const;
    virtual void setParameter(int, int);;   // Установка координат двух вершин
    virtual float getArea() const;          // Вычисление площади
private:
    int x2, y2;
};
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
// TETRAHEDRON.CPP
// Функции-элементы / Методы класса Tetrahedron
#include "StdAfx.h"
#include "iostream"
#include <cmath> 
#include "Tetrahedron.h"
 
using namespace std; 
 
/* Конструктор Tetrahedron вызывает конструктор Point с инициализаторами элементов
с помощью инициализаторов элемента и задаёт начальное значение радиуса */
Tetrahedron::Tetrahedron(int x_2, int y_2, int x1, int y1, int x, int y, int z, int h)
: Parallelepiped(x1, y1, x, y, z, h)
{ x2 = x_2; y2 = y2; }
 
void Tetrahedron::print() const
{ cout << "\n\tТетраэдр"; }
 
void Tetrahedron::greet_2() const
{ cout << "\tВведите координаты противоположной вершины: "; }
 
void Tetrahedron::setParameter(int x_2, int y_2)
{ x2 = x_2; y2 = y_2; }
 
// Вычисление площади класса Tetrahedron
float Tetrahedron::getArea() const
{ return 1.0 * abs( (x1 - x0) * (y2 - y0) - (x2 - x0) * (y1 - y0)) / 2; }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.12.2013, 00:46     Классы. Фигуры. Наследование
Посмотрите здесь:

классы. Наследование - C++
Правильно ли я организовал иерархию классов( см. минитюра) class A { public: int number; A(){number=1;} }; class...

Классы и наследование - C++
Помогите написать программу, в которой описана иерархия классов: геометрические фигуры(ромб, параллепипед, эллипс). Реализовать методы...

Классы, наследование - C++
как сделать, что бы вызывался деструктор B? Кроме как &quot;delete (B*)var;&quot; class A { public: A(){ cout &lt;&lt; &quot;A's...

Наследование. Классы. C++ - C++
Наверное мой вопрос будет смешным, но я действительно не могу придумать методы и свойства. Я совсем запуталась что чем является, и не могу...

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

классы и наследование - C++
товарищи! в понедельник зачет а я совсем в этом ничего не смыслю(((( кто-нибудь помогите, пожалуйста огромное спасибо заранее) ...

Классы и их наследование - C++
Начал изучать С++ и ООП после того как понял немного осоновы. И вот столкнулся с чем. Есть базовый класс, есть класс-наслденик, базовый...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6551 / 5017 / 463
Регистрация: 14.02.2011
Сообщений: 16,738
10.12.2013, 01:25     Классы. Фигуры. Наследование #16
вот примерно так это выглядит
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class A
{
public:
int a;
}
class B: public A
{
public:
int b;
}
class C :public B
{
public:
int c;
}
 
A oa;
B ob;
C oc;
объект oa будет содержать одну переменную a назовем её oa_a
объект 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 минуты
Цитата Сообщение от Лев Борисов Посмотреть сообщение
Я понял так, что конструктор Cylinder вызывает конструктор Point с инициализаторами элементов и задаёт начальное значение радиуса
правильно
только в данном случае Point это не отдельный объект а часть класса Cylinder
Лев Борисов
2 / 2 / 0
Регистрация: 14.02.2013
Сообщений: 99
10.12.2013, 01:27  [ТС]     Классы. Фигуры. Наследование #17
Что-то я теперь даже в ступор вошёл, как это всё с полиморфизмом соединить, его ведь мне тоже надо использовать.
ValeryS
Модератор
6551 / 5017 / 463
Регистрация: 14.02.2011
Сообщений: 16,738
10.12.2013, 01:35     Классы. Фигуры. Наследование #18
Цитата Сообщение от Лев Борисов Посмотреть сообщение
Что-то я теперь даже в ступор вошёл, как это всё с полиморфизмом соединить,
легко
только нужно понять что есть наследование
пример
есть класс человек
у него есть члены класса (поля) возраст рост ну и еще что нибудь
есть класс наследник мужчина он наследует все члены класса человек и добавляет свои например длинна бороды

а есть объекты класса мужчина
Лев Борисов, и ValeryS у нас есть все свойства(члены класса) класса мужчина
но значения в них разные
и есть только два объекта, не создается еще два объекта класса человек
просто мы одновременно и мужчина и человек
подвид, так сказать
Лев Борисов
2 / 2 / 0
Регистрация: 14.02.2013
Сообщений: 99
10.12.2013, 01:44  [ТС]     Классы. Фигуры. Наследование #19
Да, это понятно, но посмотрите ещё раз, пожалуйста, на код - разве я делаю как-то иначе? Ось - добавляю угол с двумя координатами - получаю параллелепипед.
К параллелепипеду добавляю ещё один угол и получаю треугольник в основании, то бишь тетраэдр.

Мне не стоит использовать setPoint, устанавливая и "базовые" значения через setParametr? Или я что-то снова не так понял?

Значит, никак нельзя, используя функцию setParamtr из Параллелепипеда, установить эти параметры в Тетраэдре???
ValeryS
Модератор
6551 / 5017 / 463
Регистрация: 14.02.2011
Сообщений: 16,738
10.12.2013, 01:52     Классы. Фигуры. Наследование #20
Цитата Сообщение от Лев Борисов Посмотреть сообщение
Мне не стоит использовать setPoint, устанавливая и "базовые" значения через setParametr?
да
все параметры для фигуры должны вводится одной функцией
Цитата Сообщение от Лев Борисов Посмотреть сообщение
Ось - добавляю угол с двумя координатами - получаю параллелепипед.
вот этого не понял
точка 0,0 высота 10
я ввожу 5,5 разве у меня получится параллелепипед?
и если введу потом 2,2 разве будет тетраэдр?
да и трудно как то из прямоугольников треугольники сделать
Лев Борисов
2 / 2 / 0
Регистрация: 14.02.2013
Сообщений: 99
10.12.2013, 02:21  [ТС]     Классы. Фигуры. Наследование #21
Точка 0, 0, 0, высота 10.
Ввожу 5, 5. Т.о. получаю основание параллелепипеда в плоскости XY размером 5 на 5, высота - 10.

Далее, ввожу дополнительно 2, 3. Тогда могу описать в плоскости XY треугольник с вершинами в точках (0, 0), (2, 3) и (5, 5), тетраэдр имеет высоту - 10.

Я слишком абстрагировался? )

Добавлено через 21 минуту
Ребят! Всем спасибо большое!
Я РЕШИЛ ПРОБЛЕМУ тем, что просто вызвал функцию setParametr из другой... в общем, так:
C++
1
2
3
4
5
6
7
8
void Tetrahedron::setParameter(int x_2, int y_2)
{ 
    int one, two;
    x2 = x_2; y2 = y_2; 
    Parallelepiped::greet_2();
    cin >> one; cin >> two;
    Parallelepiped::setParameter(one, two);
}
Пойдёт! Спасибо всем!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.12.2013, 08:42     Классы. Фигуры. Наследование
Еще ссылки по теме:

Классы и наследование - C++
Реализовать класс−оболочку Number для числового типа double. Реализовать методы умножения и вычитания. Создать производный класс Real, в...

Классы. Наследование - C++
Приветствую всех участников форума! Требуется помощь. Итак, задание Написать программу, демонстрирующую работу с объектами двух...

Классы и наследование - C++
Доброго времени суток. Помогите решить задание. Дан класс pegasus ,у которого родительский класс horse, надо переделать код, чтобы при...

Наследование/классы - C++
class BaseClass { public: void print() { std::cout &lt;&lt; &quot;123\r\n&quot;; } }; class DirivedClass: public BaseClass { public: ...

Классы, наследование - C++
Есть родительский класс Base, у него дочерний класс Child1, у Child1 дочерний Child2; Задача в том что-бы у класса Child1, не было...


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

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6551 / 5017 / 463
Регистрация: 14.02.2011
Сообщений: 16,738
10.12.2013, 08:42     Классы. Фигуры. Наследование #22
Цитата Сообщение от Лев Борисов Посмотреть сообщение
Я слишком абстрагировался? )
не готов сказать
но по моему иерархия притянута за уши

я бы сделал так
отдельный класс( структура) Точка , в которой три координаты
абстрактный класс Фигура в которой ничего нет только чисто виртуальные функции, Объем, Площадь
и от Фигуры бы наследовал класс Тетраэдр который содержит четыре Точки,координаты вершин, не наследует а содержит
класс Параллелограмм тоже бы наследовал от Фигуры, он содержит 8 Точек координат, если стороны параллелограмма параллельны осям координат то вводить можно две, остальные рассчитать
класс Шар, от фигуры Точку центра и радиус
ну т. д.
Yandex
Объявления
10.12.2013, 08:42     Классы. Фигуры. Наследование
Ответ Создать тему
Опции темы

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