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

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

Восстановить пароль Регистрация
 
 
Лев Борисов
2 / 2 / 0
Регистрация: 14.02.2013
Сообщений: 99
10.12.2013, 00:46     Классы. Фигуры. Наследование #1
Создан абстрактный класс 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; }
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Лев Борисов
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++ Классы и наследование
C++ Классы и наследование
Наследование. Классы. C++ C++

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

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

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

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