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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ovner
7 / 7 / 0
Регистрация: 06.10.2012
Сообщений: 140
#1

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

09.08.2013, 16:20. Просмотров 793. Ответов 4
Метки нет (Все метки)

Здраствуйте! Хотел спросить можно ли использовать структуру в классе и соответствует ли оно принципам ООП?

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++
У меня такая проблема, нужно реализовать объект-список. В нем необходимо реализовать методы обеспечивающие полную функциональность списка. ...

Структура в классе (из метода увидеть переменную) - C++
class Records { public: int Count; struct Param { public: __property unsigned int index = {write =...

Уничтожается структура данных в наследуемом классе - C++
Здравствуйте. У меня в ходе написании программы появилась проблема. У меня почему то не сохраняется структура. Здесь я привел текс...

Ошибка в классе - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;string&gt; using namespace std; class Element { public: ...

Enum в классе - C++
#include &lt;iostream&gt; #include &lt;stdio.h&gt; using namespace std; class employee { private: enum etype {laboren, secretary,...

Ошибка в классе - C++
У меня есть класс Player и класс Poker Прототип Player class Player { protected: string name; int money; int...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
6321 / 5905 / 1913
Регистрация: 18.12.2011
Сообщений: 15,181
Завершенные тесты: 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)☆
910 / 289 / 9
Регистрация: 28.04.2013
Сообщений: 2,381
Записей в блоге: 10
Завершенные тесты: 1
09.08.2013, 16:28     Структура в классе #3
Почему бы и нет? А вот насчет сответствует ли оно принципам ООП...?!
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
09.08.2013, 16:30     Структура в классе #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от ovner Посмотреть сообщение
Хотел спросить можно ли использовать структуру в классе и соответствует ли оно принципам ООП?
Можно. Соответствует, если связано не просто так, а по смыслу.
В данном случае, не понятно откуда взялось число 10.
И метод в базовом классе должен быть "чистым":
C++
1
virtual double calcPerimeter() = 0;
P.S. Квадрат - это "square".

Добавлено через 1 минуту
Цитата Сообщение от zss Посмотреть сообщение
Но рекомендуется описание новых понятий выносить наружу.
Если они не используются снаружи, то и быть им там незачем.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.08.2013, 19:23     Структура в классе
Еще ссылки по теме:

Cтек в классе - C++
Задание: Описать класс реализующий стек произвольного размера для хранения целых чисел, добавление и извлечение одиночных элементов из...

Константа в классе - C++
Что-то у нас с компилятором какое-то недопонимание. #include &lt;iostream&gt; using namespace std; class Foo{ public: Foo(); ...

декларация в классе - C++
я хочу в класс добавить указатель на другой класс и получаю следующую ошибку: product.h:20: error: ISO C++ forbids declaration of...

Ошибка в классе - C++
Доброго времени суток! Недавно прочитал тему классы, посмотрел и инете видео-урок и решил закрепить материал созданием класса. Films.h...

Шаблон в классе - C++
Имеем три файла: №1 &quot;51Template.h&quot; #include &lt;iostream&gt; using namespace std; class A { public:

Класс в классе - C++
Здравстуйте. При создании базы данных столкнулся со следующей проблемой - не знаю как определить класс внутри класса. А именно скажите в...


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

Или воспользуйтесь поиском по форуму:
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 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     Структура в классе
Ответ Создать тему
Опции темы

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