Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Locust1
0 / 0 / 0
Регистрация: 24.01.2014
Сообщений: 35
1

Динамическая память в ООП

12.05.2014, 02:13. Просмотров 912. Ответов 3
Метки нет (Все метки)

Здравствуйте, программа должна находить площадь и определять равносторонний ли треугольник. Площадь ищется только в случае равенства трех сторон треугольника. Значения вводятся с клавиатуры. Однако чего бы я не ввел, выводятся одни и те же неверные значения. Найдите пожалуйста в чем ошибка.

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
#include "stdafx.h"
#include "iostream"
using namespace std;
 
class triangle 
{
    int* A;               //создание указателя под массив сторон
 
public:
 
    triangle (int a1 = 3, int b1 = 4, int c1 = 5)   //конструктор инициализации
    {
        A = new int [3];     //динамические выд память под 3 стороны
        A[0] = a1;
        A[1] = b1;
        A[2] = c1;
    }
 
    ~triangle ()
    {
        delete [] A;
        cout << "destruktor ispolzuetsa\n";
    }
 
    
    bool proverka()
    {
        if (A[0] == A[1] && A[1] == A[2] && A[0] == A[2])
            return true;
        else
            return false;
    }
 
    double ploshad()
    {
        double result = ((sqrt(3.) * (double)(A[0] * A[0])) / 4);
        return result;
    }
 
};
 
int main()
{
    int n;
    cout << "Vvedite kol-vo treugolnikov:\n";
    cin >> n;
    triangle* B = new triangle [n];                //выделение динамической памяти под треугольники
    for(int i = 0; i < n; i++)
    {
        int a, b, c;
        cout<<"Vvedite dliny storon " << i+1 << " tr-ka:\n";
        cin >> a >> b >> c;
        B[i] = triangle (a, b, c);              //инициализация треугольника
 
        if (B[i].proverka())
        {
            cout<<i+1<<" ravnostoronnii"<<" "<<B[i].ploshad()<<"\n";
        }
        else 
            cout<<i+1<<" neravnostoronnii\n";
    } 
 
    cin.ignore();
    return 0;
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.05.2014, 02:13
Ответы с готовыми решениями:

Статическая память,Динамическая память.
a) Статическая память. Двумерный массив. Дан массив целых чисел. В массиве есть...

Динамическая матрица ООП
Добрый день, проблема заключается в следующем. Никак не могу разобраться с...

Из ООП - динамическая структура через агрегацию
Всем привет! Помогите реализовать динамическую структуру через агрегацию. ...

Динамическая память с++
Как использовать динамическую память в с++

Динамическая память
Народ, если кому не сложно помогите переделать вот эту программу со структурами...

3
Keshander
9 / 9 / 5
Регистрация: 21.04.2014
Сообщений: 31
Завершенные тесты: 1
12.05.2014, 02:53 2
косяк с деструктором. получается он удаляет каждый раз перед тем как стороны передадутся в функцию ploshad для вычисления площади. Только что в консольке проверил.
1
UnsKneD
алкокодер
155 / 151 / 41
Регистрация: 27.12.2012
Сообщений: 550
12.05.2014, 03:35 3
C++
1
B[i] = new triangle (a, b, c);
1
alsav22
5442 / 4837 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
12.05.2014, 03:57 4
Лучший ответ Сообщение было отмечено Locust1 как решение

Решение

Правило трёх: http://ru.wikipedia.org/wiki/Правило_трёх_(C%2B%2B_программирование)

Добавлено через 17 минут
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
class triangle 
{
    int* A;               //создание указателя под массив сторон
 
public:
 
    triangle (int a1 = 3, int b1 = 4, int c1 = 5)   //конструктор инициализации
    {
        A = new int [3];     //динамические выд память под 3 стороны
        A[0] = a1;
        A[1] = b1;
        A[2] = c1;
    }
 
    triangle (const triangle& tr)   //конструктор копирования
    {
        A = new int [3];   
        A[0] = tr.A[0];
        A[1] = tr.A[1];
        A[2] = tr.A[2];
    }
 
    triangle& operator=(const triangle& tr) //оператор присваивания
    {
        if (&tr == this)
            return *this;
        A[0] = tr.A[0];
        A[1] = tr.A[1];
        A[2] = tr.A[2];
        return *this;
    
    }
 
    ~triangle ()
    {
        delete [] A;
        cout << "destruktor ispolzuetsa\n";
    }
 
    
    bool proverka()
    {
        if (A[0] == A[1] && A[1] == A[2] && A[0] == A[2])
            return true;
        else
            return false;
    }
 
    double ploshad()
    {
        double result = ((sqrt(3.) * (double)(A[0] * A[0])) / 4);
        return result;
    }
 
};
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2014, 03:57

Динамическая память C++
Народ, подскажите, плиз, что я делаю не так? Надо посимвольно ститать строку,...

Динамическая память
Есть 2 массива одной размерности: int *m1 = new int , *m2 = new int ;...

Динамическая память
в чем ошибка #include &lt;iostream&gt; #include &quot;conio.h&quot; using namespace std;...


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

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

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