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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.03.2021, 09:22   #1
Artur221
Пользователь
 
Регистрация: 18.03.2021
Сообщений: 26
По умолчанию переделать публичные методы в приватные

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

#include <iostream>
#include <cmath>

const double pi = 3.14159265358979323846;

double radToDeg(double x) {

return x * (180 / pi);
}

double sqr(double x) {

return pow(x, 2);
}

//------------
class praktika {

public:
praktika(double a, double b, double c) {

a_ = a;
b_ = b;
c_ = c;
}
double GetA() const;
double GetB() const;
double GetC() const;

void SetA(double a);
void SetB(double v);
void SetC(double c);
void vidtreygolnika();

double ploshad() const;
double Alpha() const;
double Beta() const;
double Gamma() const;
double Perimeter() const;

bool IsValid() const;

private:
double a_;
double b_;
double c_;

};



double praktika::GetA() const {

return a_;
}

double praktika::GetB() const {

return b_;
}

double praktika::GetC() const {

return c_;
}

void praktika::SetA(double a) {

a_ = a;
}

void praktika::SetB(double b) {

b_ = b;
}

void praktika::SetC(double c) {

c_ = c;
}

double praktika::Alpha() const {

return radToDeg(acos((sqr(b_) + sqr(c_) - sqr(a_)) / (2 * b_ * c_)));
}

double praktika::Beta() const {

return radToDeg(acos((sqr(a_) + sqr(c_) - sqr(b_)) / (2 * a_ * c_)));
}

double praktika::Gamma() const {

return radToDeg(acos((sqr(a_) + sqr(b_) - sqr(c_)) / (2 * a_ * b_)));
}

double praktika:loshad() const {

const double p = Perimeter() / 2;
return sqrt(p * (p - a_) * (p - b_) * (p - c_));
}

double praktika::Perimeter() const {

return a_ + b_ + c_;
}

bool praktika::IsValid() const {

return (a_ < b_ + c_) && (b_ < c_ + a_) && (c_ < a_ + b_);
}

void praktika::vidtreygolnika() {

if ((a_ == 90) || (b_ == 90) || (c_ == 90)) std::cout << "Треугольник прямоугольный" << std::endl;
if ((a_ < 90) && (b_ < 90) && (c_ < 90)) std::cout << "Треугольник остроугольный" << std::endl;
if (((a_ > 90) || (b_ > 90) || (c_ > 90)) && (a_ + b_ + c_ == 180)) std::cout << "Треугольник тупоугольный " << std::endl;
}


int main() {
setlocale(LC_ALL, "rus");
double a, b, c;

std::cout << "a: ";
std::cin >> a;

std::cout << "b: ";
std::cin >> b;

std::cout << "c: ";
std::cin >> c;

praktika triangle(a, b, c);

if (!triangle.IsValid()) {

std::cout << "error" << std::endl;
}
else {
std::cout << "--------------\n"
"a = " << triangle.GetA() << "\n"
"b = " << triangle.GetB() << "\n"
"c = " << triangle.GetC() << "\n"
"alpha = " << triangle.Alpha() << "\n"
"beta = " << triangle.Beta() << "\n"
"gamma = " << triangle.Gamma() << "\n"
"ploshad = " << triangle.ploshad() << "\n"
"perimeter = " << triangle.Perimeter() << "\n";
triangle.vidtreygolnika();
}
system("pause");
return(0);

}
Artur221 вне форума Ответить с цитированием
Старый 28.03.2021, 11:12   #2
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 951
По умолчанию

Цитата:
Сообщение от Artur221 Посмотреть сообщение
сделать все методы приватными
этом классом будет невозможно пользоваться.

а так - на здоровье
Код:
private:
Алексей1153 вне форума Ответить с цитированием
Старый 28.03.2021, 11:14   #3
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 951
По умолчанию

по мне, так всё вот это - лишнее. Поля сделать публичными, инициализировать.
Цитата:
Сообщение от Artur221 Посмотреть сообщение
praktika(double a, double b, double c) {

a_ = a;
b_ = b;
c_ = c;
}
double GetA() const;
double GetB() const;
double GetC() const;

void SetA(double a);
void SetB(double v);
void SetC(double c);
Алексей1153 вне форума Ответить с цитированием
Старый 28.03.2021, 11:27   #4
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 951
По умолчанию

Код:
#include <iostream>
#include <cmath>

constexpr double radToDeg(double x)
{
    return x * (180 / M_PI);
}

constexpr double sqr(double x)
{
    return std::pow(x, 2);
}

class praktika
{
public:    
    double a_{};
    double b_{};
    double c_{};

public:
    constexpr double Alpha() const
    {
        return radToDeg(std::acos((sqr(b_) + sqr(c_) - sqr(a_)) / (2 * b_ * c_)));
    }
    
    constexpr double Beta() const
    {
        return radToDeg(std::acos((sqr(a_) + sqr(c_) - sqr(b_)) / (2 * a_ * c_)));
    }
    
    constexpr double Gamma() const
    {
        return radToDeg(std::acos((sqr(a_) + sqr(b_) - sqr(c_)) / (2 * a_ * b_)));
    }
    
    constexpr double Square() const
    {
        const double p = Perimeter() / 2;
        return std::sqrt(p * (p - a_) * (p - b_) * (p - c_));
    }
    
    constexpr double Perimeter() const
    {
        return a_ + b_ + c_;
    }
    
    constexpr bool IsValid() const
    {
        return (a_ < b_ + c_) && (b_ < c_ + a_) && (c_ < a_ + b_);
    }
    
    constexpr void vidtreygolnika()const
    {
        if ((a_ == 90) || (b_ == 90) || (c_ == 90)) std::cout << "Треугольник прямоугольный" << std::endl;
        if ((a_ < 90) && (b_ < 90) && (c_ < 90)) std::cout << "Треугольник остроугольный" << std::endl;
        if (((a_ > 90) || (b_ > 90) || (c_ > 90)) && (a_ + b_ + c_ == 180)) std::cout << "Треугольник тупоугольный " << std::endl;
    }
};

int main()
{
    setlocale(LC_ALL, "rus");

    praktika triangle;//{0,0,0};
    std::cout << "a: "; std::cin >> triangle.a_;
    std::cout << "b: "; std::cin >> triangle.b_;
    std::cout << "c: "; std::cin >> triangle.c_;


    if (!triangle.IsValid())
    {
        std::cout << "error" << std::endl;
    }
    else
    {
        std::cout << "--------------\n"
        "a = " << triangle.a_<< "\n"
        "b = " << triangle.b_<< "\n"
        "c = " << triangle.c_<< "\n"
        "alpha = " << triangle.Alpha() << "\n"
        "beta = " << triangle.Beta() << "\n"
        "gamma = " << triangle.Gamma() << "\n"
        "ploshad = " << triangle.Square() << "\n"
        "perimeter = " << triangle.Perimeter() << "\n";
        triangle.vidtreygolnika();
    }

    system("pause");
    return(0);
}
Алексей1153 вне форума Ответить с цитированием
Старый 28.03.2021, 12:24   #5
Artur221
Пользователь
 
Регистрация: 18.03.2021
Сообщений: 26
По умолчанию

Алексей1153, ну у меня в задании так сказано Для класса объекта, полученного в задании выше разработать private методы,
вычисляющие недостающие (не вводимые в сетторах) данные:Определение типа
треугольника,вычисление периметра,вычисление площади.

Цитата:
а так - на здоровье
Код:
private:

Последний раз редактировалось BDA; 29.03.2021 в 19:06.
Artur221 вне форума Ответить с цитированием
Старый 29.03.2021, 07:27   #6
Scherbak
 
Регистрация: 26.03.2021
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Artur221 Посмотреть сообщение
Алексей1153, ну у меня в задании так сказано Для класса объекта, полученного в задании выше разработать private методы,
вычисляющие недостающие (не вводимые в сетторах) данные:Определение типа
треугольника,вычисление периметра,вычисление площади.
Цитата:
а так - на здоровье
Код:
private:
Извините, вопрос не по теме. Можете сказать название учебника и автора?

Последний раз редактировалось BDA; 29.03.2021 в 19:07.
Scherbak вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Публичные методы класса наследника Heneken87 Общие вопросы Delphi 1 16.06.2017 15:03
Публичные переменные )Игнат( Общие вопросы Delphi 10 21.08.2009 20:06