toffi77
@toffi77

Как оформить некорректный ввод значений в наследниках?

прямоугольный треугольник (угол C всегда равен 90);
равнобедренный треугольник (стороны a и c равны, углы A и C равны);
равносторонний треугольник (все стороны равны, все углы равны 60);


#include <iostream>
using namespace std;

class triangle {
private:
    string ShapeName; int a = 0, b = 0, c = 0, A = 0, B = 0, C = 0;
public:
    triangle(){}
    triangle(string _ShapeName, int _a, int _b, int _c, int _A, int _B, int _C) : ShapeName(_ShapeName), a(_a),
        b(_b), c(_c), A(_A), B(_B), C(_C){}
    string Shape_Name() { return ShapeName; }
    int a1() { return a; }
    int b1() { return b; }
    int c1() { return c; }
    int A1() { return A; }
    int B1() { return B; }
    int C1() { return C; }

    <b>bool get_c1(int _c){
        if (_с == 30 && _с == 10) { c = _с; return true; }
        else cout << "Некорректный ввод"; return false;
    }</b> // как создать функцию которая не позволит создавать не подходящие по условию треугольники

    void print_info(string ShapeName, int a, int b, int c, int A, int B, int C) {
        cout << "" << ShapeName << ":" << "\nСтороны: " << "a=" << a << " b=" << b << " c=" << c
            << "\nУглы: " << "A=" << A << " B=" << B << " C=" << C << endl;
    }
};
class right_triangle : public triangle{};
class isosceles_triangle : public right_triangle{};
class equilateral_triangle : public isosceles_triangle{};

int main()
{
    setlocale(LC_ALL, "Russian");
    triangle* ta;
    triangle obj1;
    right_triangle obj2;
    isosceles_triangle obj3;
    equilateral_triangle obj4;
    ta = &obj1;
    ta = &obj2;
    ta = &obj3;
    ta = &obj4;
    obj1.print_info("Треугольник", 10, 20, 30, 50, 60, 70);
    cout << endl;
    obj2.print_info("Прямоугольный треугольник", 10, 20, 30, 50, 60, 90);
    cout << endl;
    obj3.print_info("Равнобедренный треугольник", 10, 20, 10, 50, 60, 50);
    cout << endl;
    obj4.print_info("Равносторонний треугольник", 30, 30, 30, 60, 60, 60);
}
  • Вопрос задан
  • 59 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Xiran
Тебе нужен CRTP, или шаблон Traits, а если тебе нужно хранить их в какой-то структуре данных (массив, список, дерево, ...), просто сделай интерфейс и "наследуй" базовый класс от него
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы