Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.01.2014, 21:05   #1
dkii
Пользователь
 
Регистрация: 11.12.2013
Сообщений: 54
Стрелка Класс треугольник

Здравствуйте, уважаемые форумчане, очень нужна ваша помощь.
Задача. Описать указанный в варианте класс и составить коды основных
методов.
Класс: треугольник
Классификация: по углам(остроугольный, тупоугольный, прямоугольный).
Мои скромные наработки:
Код:
#include "iostream"
#include <stdio.h>
#include <conio.h>
using namespace std;
class Delta
{
public: 
void Metod1()
	{
		setlocale(LC_ALL, "Russian");
		cout <<"Введите стороны треугольника"<<endl;
		int a;
		int b;
		int c;
		cin >>a>>b>>c;
		if(a >= b + c || b >= a + c || c >= b + a)
		{
			cout <<"Треугольник не существует"<<endl;
		};
};
}
class Delta2 : public Delta {public:
void Metod2()
{
	if(a*a == b*b+c*c || b*b == a*a+c*c || c*c == b*b+a*a)
		{
			cout <<"Треугольник прямоугольный"<<endl;
		};

};
}
class Delta3 : public Delta {public:
void Metod3()
{
	if(a*a > b*b+c*c || b*b > a*a+c*c || c*c > b*b+a*a)
	{
		cout <<"Треугольник тупоугольный"<<endl;
	else 
	{
		cout <<"Треугольник остроугольный"<<endl;
	}
	};
};
}
int main()
{
	system("Pause");
	return 0;
}

Последний раз редактировалось dkii; 28.01.2014 в 21:19.
dkii вне форума Ответить с цитированием
Старый 28.01.2014, 21:44   #2
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

Зачем вам три класса и наследование? Ладно, сделали наследование - так зачем методы разные, тогда уж один виртуальный, типа, ТипТреугольника.
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Старый 28.01.2014, 21:49   #3
dkii
Пользователь
 
Регистрация: 11.12.2013
Сообщений: 54
По умолчанию

Скажите как должно быть.
dkii вне форума Ответить с цитированием
Старый 29.01.2014, 01:39   #4
SAMOUCHKA
Форумчанин
 
Регистрация: 07.08.2011
Сообщений: 576
По умолчанию

А почему a, b, c -целые типы? Не понятно, для чего три класса? можно один класс с функцией-членом, определяющей и выводящей на экран тип треугольника.
a, b, c ,наверно надо сделать членами класса(лучше приватными), а не локальными переменными функции. Ну а если уж и делать локальными, то функцию лучше сделать статической. Вообще в этом случае теряет смысл применять ООП, проще работать с простой функцией, без класса.

может как то так?
Код:
class Triangle
{
private:
    float a, b, c;
public:
    void set(float _a, float _b, float _c); // присваивание значений сторонам
    void func(); // функция-член определяющая тип треугольника
};
тут только объявление функций, определить можешь в другом месте, но можно и внутри тела класса.

Не знаю почему, но в литературе пишут что в С++ правильно называть не метод, а функция-член класса. Метод это в java. В чем различие сам не понимаю, но раз умные дядьки так пишут, придерживаюсь этого.

И еще, если будешь применять float вместо int сравнить с помощью оператора == просто так не получится, ибо их нельзя сравнивать с абсолютной точностью. Придется ввести константу, например равную 0.001, если разность сторон меньше этой константы, то стороны считать равными.
Конечно это усложнит код, но логично что стороны могут иметь и дробное значение.
Цитата:
Задача. Описать указанный в варианте класс и составить коды основных
методов.
а какие еще нужны?

Последний раз редактировалось SAMOUCHKA; 29.01.2014 в 02:03.
SAMOUCHKA вне форума Ответить с цитированием
Старый 29.01.2014, 02:15   #5
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
Сообщение от SAMOUCHKA Посмотреть сообщение
Вообще в этом случае теряет смысл применять ООП, проще работать с простой функцией, без класса.
ИМХО, видимо смысл задания в обучении основам ООП на одном из простейших примеров.
Цитата:
Сообщение от SAMOUCHKA Посмотреть сообщение
может как то так?
Код:
class Triangle
{
private:
    float a, b, c;
public:
    void set(float _a, float _b, float _c); // присваивание значений сторонам
    void func(); // функция-член определяющая тип треугольника
};
тут только объявление функций, определить можешь в другом месте, но можно и внутри тела класса.
Идея хорошая, только где гарантия того, что перед вызовом func() в полях окажутся значения длин сторон треугольника, а не так называемый "мусор"?
ИМХО: может быть вместо:
Код:
 void set(float _a, float _b, float _c);
лучше переопределить конструктор?
Streletz вне форума Ответить с цитированием
Старый 29.01.2014, 02:26   #6
SAMOUCHKA
Форумчанин
 
Регистрация: 07.08.2011
Сообщений: 576
По умолчанию

Код:
Идея хорошая, только где гарантия того, что перед вызовом func() в полях окажутся значения длин сторон треугольника, а не так называемый "мусор"?
ИМХО: может быть вместо:
Код:

 void set(float _a, float _b, float _c);

лучше переопределить конструктор?
я просто привел упрощенный пример.
Конечно перед вызовом func(), надо сторонам передать определенные значения. Либо в конструкторе, либо в функции set. Ну а смысл последней в том что, если надо будет менять значения сторон.
Я же не знаю точно что автору надо, вот и предложил такой вариант
SAMOUCHKA вне форума Ответить с цитированием
Старый 29.01.2014, 02:56   #7
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
Я же не знаю точно что автору надо, вот и предложил такой вариант
Аналогично. Поэтому я тоже предложил упрощённый вариант.
Цитата:
смысл последней в том что, если надо будет менять значения сторон
Простите, этот вопрос я как-то упустил из вида.
Цитата:
Либо в конструкторе, либо в функции set.
Извините, но вот здесь я с Вами не согласен. Всё дело в том, что при создании объекта ему обязательно должны быть переданы все данные, которые имеют критическое значение для его работы. Поэтому передача значений длин сторон в конструкторе, в данном случае обязательна.
На счёт функции set, Вы совершенно справедливо заметили, что она, по сути, не является обязательной. Однако без переопределения конструктора здесь, к сожалению, не обойтись.
Streletz вне форума Ответить с цитированием
Старый 29.01.2014, 18:56   #8
dkii
Пользователь
 
Регистрация: 11.12.2013
Сообщений: 54
По умолчанию

помогите пожалуйста переделать код или напишите заново.
dkii вне форума Ответить с цитированием
Старый 29.01.2014, 19:04   #9
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

Для начала скажиту, что Вы хотите от кода то? А то не понятно, что вам написать... вариантов дофига ведь.
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Старый 29.01.2014, 19:47   #10
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
Вопрос

Цитата:
Сообщение от dkii Посмотреть сообщение
помогите пожалуйста переделать код или напишите заново.
В посте #4 уважаемый коллега уже написал Вам его заново. Вам остаётся только сделать реализацию объявленных методов.Советы по переделке кода Вам, так же неоднократно давали.
В чём проблема? Каким критериям должен соответствовать код?
Streletz вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Класс треугольник\прямоугольник Gunstrike Общие вопросы C/C++ 1 18.12.2011 18:52
Сконструировать новый класс, соответствующий фигуре «Треугольник» Саша Амбражевич Помощь студентам 3 03.03.2011 08:34
В C# описать класс представляющий треугольник Namles Помощь студентам 2 20.05.2010 14:49
В C# описать класс представляющий треугольник Namles Фриланс 4 20.05.2010 01:33
Класс треугольник в java Vitaliy_Kom Помощь студентам 0 23.11.2009 10:01