Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Locust1
0 / 0 / 0
Регистрация: 24.01.2014
Сообщений: 35
12.05.2014, 02:13     Динамическая память в ООП #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
#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;
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.05.2014, 02:13     Динамическая память в ООП
Посмотрите здесь:

Динамическая память C++
Из ООП - динамическая структура через агрегацию C++
Динамическая память C++
Статическая память,Динамическая память. C++
C++ Динамическая память
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Keshander
8 / 8 / 4
Регистрация: 21.04.2014
Сообщений: 31
Завершенные тесты: 1
12.05.2014, 02:53     Динамическая память в ООП #2
косяк с деструктором. получается он удаляет каждый раз перед тем как стороны передадутся в функцию ploshad для вычисления площади. Только что в консольке проверил.
UnsKneD
алкокодер
 Аватар для UnsKneD
153 / 149 / 11
Регистрация: 27.12.2012
Сообщений: 548
12.05.2014, 03:35     Динамическая память в ООП #3
C++
1
B[i] = new triangle (a, b, c);
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.05.2014, 03:57     Динамическая память в ООП #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Правило трёх: http://ru.wikipedia.org/wiki/Правило...ограммирование)

Добавлено через 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;
    }
 
};
Yandex
Объявления
12.05.2014, 03:57     Динамическая память в ООП
Ответ Создать тему
Опции темы

Текущее время: 16:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru