0 / 0 / 5
Регистрация: 14.12.2015
Сообщений: 186
1

Создайте класс RightTriangle и Создайте производный класс Rectangle

20.03.2017, 22:06. Показов 1510. Ответов 4
Метки нет (Все метки)

Создайте класс RightTriangle (Прямоугольный треугольник), задаваемый катетами и опишите механизм вычисления его периметра. Создайте производный класс Rectangle (Прямоугольник), задаваемый длинами сторон и умеющий вычислять свой периметр. Реализуйте метод с одинаковым именем в обоих классах для вывода параметров объекта

Вопрос1: правильно ли я реализовал метод с одинаковым именем в обоих классах для вывода параметров объекта?

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
 
 
namespace RightTriangle
{   
    class RightTriangle
    {
        private int cathetusA;        //катет А
        private int cathetusB;        //катет Б
        private int hypothenuse;    //гипотенуза
 
        public RightTriangle(int sideA, int sideB)
        {
            cathetusA = sideA;
            cathetusB = sideB;
        }
 
        public int sideA
        {
            get { return cathetusA; }
            set { cathetusA = value; }
        }
 
        public int sideB
        {
            get { return cathetusB; }
            set { cathetusB = value; }
        }
 
        //Вот тут я реализовал метод для треугольника
        //который выводит параметры объекта
        public void getObjectInfo()     
        {
            Console.WriteLine("Triangle info:\nSideA=" + sideA + "\nSideB=" + sideB + "\nPerimetr=" + TrianglePerimetr() + "\n------------");
        }
 
        //метод, который находит периметр треугольника
        public int TrianglePerimetr()   
        {
            //Формула:
            //P = a + b + c
            //c - hypothenuse, a - sideA, b - sideB
            //[SUP]c2[/SUP] = [SUP]a2[/SUP] + [SUP]b2[/SUP]
            Math.Pow(sideA, 2);
            Math.Pow(sideB, 2);
            hypothenuse = sideA + sideB;
 
            Math.Sqrt(hypothenuse); 
            Math.Sqrt(sideA);
            Math.Sqrt(sideB);
 
            return sideA + sideB + hypothenuse;
        }
    }
 
    class Rectangle : RightTriangle
    {
        public Rectangle(int sideA, int sideB) : base(sideA, sideB) { }
 
        //Вот тут я реализовал метод для прямоугольника
        //который выводит параметры объекта
        
        public void getObjectInfo()   //тут getObjectInfo() подчёркивает зелёным цветом, но программа работает
        {                             //RightTriangle.Rectangle.getObjectInfo() hides inherited member RightTriangle.RightTriangle.getObjectInfo(). 
                                      //Use the new keyword if hiding was intended
            Console.WriteLine("Rectangle info:\nSideA=" + sideA + "\nSideB=" + sideB + "\nPerimetr=" + RectanglePerimetr() + "\n------------");
        }
 
        //метод, который находит периметр прямоугольника
        public int RectanglePerimetr()
        {
            //Формула:
            //P = (a + b) * 2
 
            return (sideA + sideB) * 2;
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            RightTriangle triangle = new RightTriangle(5, 10);
            Rectangle rectangle = new Rectangle(20, 10);
 
            triangle.getObjectInfo();
            rectangle.getObjectInfo();
 
            Console.ReadLine();
        }
    }
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.03.2017, 22:06
Ответы с готовыми решениями:

Создайте класс Parallelogram. Этот класс хранит декартовы координаты четырех углов параллелограмма
Создайте класс Parallelogram.Этот класс хранит декартовы координаты четырех углов параллелограмма....

Создайте класс, описывающий и реализующий класс-наследник класса "прямоугольник"
создайте класс описывающий и реализующий класс-наследник класса object геометрическую фигуру ...

Создайте класс Student
Создайте класс Student, описывающий студента. Поля класса – фамилия, имя и отчество студента, пол,...

Создайте класс DocumentWorker
Здравствуйте. Помогите пожалуйста написать программу. Очень нужно. Дали задание, а время на...

4
Нарушитель
3118 / 2214 / 1095
Регистрация: 14.08.2016
Сообщений: 7,586
20.03.2017, 22:19 2
Лучший ответ Сообщение было отмечено blocker147 как решение

Решение

37 строка - public virtual void getObjectInfo()
69 - public override void getObjectInfo()
далее, катеты объявлены как int, гипотенуза тоже, но квадратный корень - double, либо приводите тип(что отбросит дробную часть), либо округляйте(что тоже в корне не верно), надо сменить их тип на double
что делает эта конструкция вообще не понятно(ну вернее задумка ясна, но реализация )
C#
1
2
3
4
5
6
7
8
9
Math.Pow(sideA, 2);
            Math.Pow(sideB, 2);
            hypothenuse = sideA + sideB; //это единственная строка которая хоть что-то дает в итоге, но поставленную задачу не решает
 
            Math.Sqrt(hypothenuse); 
            Math.Sqrt(sideA); 
            Math.Sqrt(sideB);
 
            return sideA + sideB + hypothenuse;
тут должно быть примерно следующее
C#
1
2
3
4
        public double TrianglePerimetr() //заменен тип
        {
            return sideA + sideB + Math.Sqrt(sideA*sideA + sideB*sideB);
        }
ну и тип всех переменных сменить на double
1
0 / 0 / 5
Регистрация: 14.12.2015
Сообщений: 186
20.03.2017, 22:27  [ТС] 3
на одну переменную стало меньше
C#
1
private int hypothenuse; //never used
Спасибо
0
0 / 0 / 5
Регистрация: 14.12.2015
Сообщений: 186
26.03.2017, 20:10  [ТС] 4
Преподаватель сказал, что периметр это не метод класса, а свойство. Объяснил это тем, что это противоречит идеологии ООП.
C#
1
2
3
4
 public double TrianglePerimetr() 
* * * * {
* * * * * * return sideA + sideB + Math.Sqrt(sideA*sideA + sideB*sideB);
* * * * }
заменён на
C#
1
2
3
4
public virtual void Perimetr//Для треугольника. И public override void Perimetr для прямоугольника
{
get { return sideA + sideB + Math.Sqrt(sideA * sideA + sideB * sideB); }
}
0
Эксперт .NETАвтор FAQ
10262 / 5003 / 1814
Регистрация: 11.01.2015
Сообщений: 6,206
Записей в блоге: 34
26.03.2017, 22:02 5
Цитата Сообщение от blocker147 Посмотреть сообщение
это не метод класса, а свойство. Объяснил это тем, что это противоречит идеологии ООП.
Ога, то-то в C++ и Java вообще нет свойств. Наверно они противоречат идеологии ООП
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.03.2017, 22:02

Создайте класс Разводной мост
Ребят помогите решить задачу! Разводной мост. Создайте класс Разводной мост. Создайте два метода,...

Создайте класс с именем train
Здравствуйте помогите пожалуйста написать программу. Я только начал изучать ООП и задали, на мой...

Создайте класс описывающий колоду карт
Создайте класс описывающий колоду карт. Карты можно выбирать из колоды, перемешивать, выводить на...

Создайте класс семейства People (люди)
Это все одно задание. Я понимаю, что оно простое, но сообразить, как его делать, я не могу! ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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