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

Структура в классе - C++

Восстановить пароль Регистрация
 
ovner
7 / 7 / 0
Регистрация: 06.10.2012
Сообщений: 140
09.08.2013, 16:20     Структура в классе #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
66
67
68
69
#include <iostream>
#include <cmath>
using namespace std;
 
class Quad
{
protected:
    struct coord
    {
    int a;
    int b;
    } figure[10];
public:
    Quad(){};
    ~Quad(){};
    
    virtual double calcPerimeter(){return 0;}
    void inputData()
    {
        cout << "Enter coords of figure: " << endl;
        for (int i = 0; i < 4; i++)
        {
            cout << "Point " << i+1 << endl;
            cin >> figure[i].a >> figure[i].b;
        }
    }
};
 
class Rectangle : public Quad
{
public:
    double calcPerimeter() // P = 2(a+b)
    {
        double k = 0, l = 0;
            k = abs(figure[1].b - figure[0].b);
            l = abs(figure[2].a - figure[1].a);
        return 2 * (k+l);
    }
};
 
class Qudrat : public Quad
{
public:
    double calcPerimeter()
    {
        return 4 * abs(figure[1].b - figure[0].b);
    }
};
 
void main()
{
    Quad *mas[2];
    double p = 0, z = 0;
    mas[0] = new Rectangle;
    mas[1] = new Qudrat;
 
    //for (int i = 0; i < 1; i++)
    mas[0] -> inputData();
    p = mas[0] -> calcPerimeter();
 
    mas[1] -> inputData();
    z = mas[1] -> calcPerimeter();
    cout << "Perimeter of Rectangle is: " << p << endl;
    cout << "Perimeter of Quadric is: " << z << endl;
    cin.get();
    cin.get();
    delete mas[0];
    delete mas[1];
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.08.2013, 16:20     Структура в классе
Посмотрите здесь:

C++ Структура в классе, это возможно?
У меня класс B в классе A, а в классе B рекурсивная функция переопределения оператора "()", как её вызвать, не создавая явно объект класса B? C++
C++ Известны оценки по физике каждого ученика двух классов.Определить средниюю оценку в каждом классе.Количество учащихся в каждом классе одинаковое!
Как обьявить переменную в одном классе и что бы ее было видно в дочернем классе C++
Класс в классе C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5953 / 5558 / 1787
Регистрация: 18.12.2011
Сообщений: 14,204
Завершенные тесты: 1
09.08.2013, 16:27     Структура в классе #2
Это ничему не противоречит.
Но рекомендуется описание новых понятий выносить наружу.
C++
1
2
3
4
5
6
7
8
9
10
struct coord
{
    int a;
    int b;
};
class Quad
{
protected:
   coord figure[10];
public:
2ima
☆ Форумчанин(FSC)☆
 Аватар для 2ima
909 / 288 / 9
Регистрация: 28.04.2013
Сообщений: 2,324
Записей в блоге: 10
Завершенные тесты: 1
09.08.2013, 16:28     Структура в классе #3
Почему бы и нет? А вот насчет сответствует ли оно принципам ООП...?!
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
09.08.2013, 16:30     Структура в классе #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от ovner Посмотреть сообщение
Хотел спросить можно ли использовать структуру в классе и соответствует ли оно принципам ООП?
Можно. Соответствует, если связано не просто так, а по смыслу.
В данном случае, не понятно откуда взялось число 10.
И метод в базовом классе должен быть "чистым":
C++
1
virtual double calcPerimeter() = 0;
P.S. Квадрат - это "square".

Добавлено через 1 минуту
Цитата Сообщение от zss Посмотреть сообщение
Но рекомендуется описание новых понятий выносить наружу.
Если они не используются снаружи, то и быть им там незачем.
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
09.08.2013, 19:23     Структура в классе #5
Согласен. Можно и соответствует.
И мне кажется что самый наглядный тому пример - итератор.
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
66
67
68
69
#include <iostream>
#include <exception>
#include <stdexcept>
 
using namespace std;
 
enum {
    small_container_capacity = 256
};
 
template <class T> class small_container {
    T *     m_data;
    size_t  m_size;
 
public:
    small_container() : m_data( new T [small_container_capacity] ), m_size(0) {}
    ~small_container() { delete [] m_data; }
 
    void push_back( T value ) {
        if ( m_size == small_container_capacity )
            throw out_of_range( "small_container: push_back() - subscript out of range" );
 
        m_data[m_size] = value;
        m_size++;
    }
 
    T pop_back() {
        if ( !m_size )
            throw out_of_range( "small_container: pop_back() - subscript out of range" );
 
        return m_data[--m_size];
    }
 
    class iterator {
        T *     m_head;
        size_t  m_size;
    public:
        iterator( const small_container & sc ) : m_head( sc.m_data ), m_size( sc.m_size ) {}
        iterator & operator ++ () {
            m_head++;
            m_size--;
            return *this;
        }
 
        T operator * () {
            return *m_head;
        }
 
        operator bool () const {
            return !!m_size;
        }
    };
 
};
 
int main()
{
    small_container <int> sc;
 
    for ( int i = 0; i < 10; i++ ) {
        sc.push_back( i );
    }
 
    for ( small_container <int>::iterator it = sc; it; ++it ) {
        cout << *it << endl;
    }
 
    return 0;
}
Yandex
Объявления
09.08.2013, 19:23     Структура в классе
Ответ Создать тему
Опции темы

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