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

Наследование или создание класса в классе? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
Matlabist
2 / 2 / 0
Регистрация: 28.11.2010
Сообщений: 98
05.02.2011, 15:24     Наследование или создание класса в классе? #1
У меня есть класс А и класс Б. В классе А я хочу создать объекты класса Б. Как лучше это сделать? Или лучше использовать наследование?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.02.2011, 15:24     Наследование или создание класса в классе?
Посмотрите здесь:

У меня класс B в классе A, а в классе B рекурсивная функция переопределения оператора "()", как её вызвать, не создавая явно объект класса B? C++
Создание сложной структуры или класса C++
C++ Создание наследовательного класса(классы-наследование)
Такой способ создание экземпляра класса хорошо или плохо? C++
Объект класса в классе C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
panicwassano
590 / 558 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
05.02.2011, 15:49     Наследование или создание класса в классе? #2
вы понимаете, что такое наследование и агрегирование? используейте второе
Matlabist
2 / 2 / 0
Регистрация: 28.11.2010
Сообщений: 98
05.02.2011, 15:56  [ТС]     Наследование или создание класса в классе? #3
Не знаю. Спрашиваю потому что не знаю,не изобретаю ли я велосипед.
Просто я хочу описать в одном классе другой класс.
У меня есть класс А. В классе А я объявляю класс Б. В классе А создаю объекты класса Б.
volovzi
266 / 168 / 8
Регистрация: 14.03.2010
Сообщений: 501
05.02.2011, 16:02     Наследование или создание класса в классе? #4
Matlabist, покажи свою программу, посмотрим.
Евгений М.
1033 / 974 / 53
Регистрация: 28.02.2010
Сообщений: 2,817
Завершенные тесты: 2
05.02.2011, 16:03     Наследование или создание класса в классе? #5
Цитата Сообщение от Matlabist Посмотреть сообщение
В классе А я хочу создать объекты класса Б.
Подчеркнутая буква - ключевая. Однозначно создавать объекты класса Б как члены класса А.

Можно реальный пример (если есть)?
panicwassano
590 / 558 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
05.02.2011, 16:07     Наследование или создание класса в классе? #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class CPoint
{
public:
    CPoint(double x, double y);
 
    double GetX()const;
    double GetY()const;
private:
    double m_x, m_y;
};
 
 
class CTriangle
{
public:
    CTriangle(CPoint const& p1, CPoint const& p2, CPoint const& p3);
 
    CPoint GetVertex(unsigned index)const;
private:
    CPoint m_p1, m_p2, m_p3;
};
Евгений М.
1033 / 974 / 53
Регистрация: 28.02.2010
Сообщений: 2,817
Завершенные тесты: 2
05.02.2011, 16:09     Наследование или создание класса в классе? #7
panicwassano, так и оставьте.
Matlabist
2 / 2 / 0
Регистрация: 28.11.2010
Сообщений: 98
05.02.2011, 16:15  [ТС]     Наследование или создание класса в классе? #8
Выдает ошибку
B::B' : cannot access private member declared in class 'A::B'
Почему в самом классе нельзя описать?
Как сделать наследование правильно?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class A
{
    A()
    {
         B* b1=new B();
         B* b2=new B();
         B* b3=new B();
    };
    class B
    {
        B()
        {
        };
    };
}
Чем это хуже вот этого

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class CTriangle
{
class CPoint
{
public:
        CPoint(double x, double y);
 
        double GetX()const;
        double GetY()const;
private:
        double m_x, m_y;
};
 
public:
        CTriangle(CPoint const& p1, CPoint const& p2, CPoint const& p3);
 
        CPoint GetVertex(unsigned index)const;
private:
        CPoint m_p1, m_p2, m_p3;
};
panicwassano
590 / 558 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
05.02.2011, 16:19     Наследование или создание класса в классе? #9
так в чем вопрос то? при создании объекта А создадутся 3 объекта класса B. Класс B объяви до конструктора класса А.
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
05.02.2011, 16:36     Наследование или создание класса в классе? #10
Цитата Сообщение от Matlabist Посмотреть сообщение
Выдает ошибку
B::B' : cannot access private member declared in class 'A::B'
Где? В какой строке?

Цитата Сообщение от Matlabist Посмотреть сообщение
Почему в самом классе нельзя описать?
Можно.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class A {
 public:
  class B {
  };
  A() {
    b1 = new B;
    b2 = new B;
    b3 = new B;
  }
  ~A() {
    delete b1;
    delete b2;
    delete b3;
  }
 private:
  B *b1, *b2, *b3;
};
Цитата Сообщение от Matlabist Посмотреть сообщение
Как сделать наследование правильно?
В данном случае не нужно наследования, нужна агрегация. Это когда один объект включает в себя другие объекты.

Цитата Сообщение от Matlabist Посмотреть сообщение
Чем это хуже вот этого
По смыслу хуже. По смыслу, класс точка не уникален для класса треугольника. Класс точка может так же описывать точки, скажем, многоугольника. Поэтому по смыслу лучше сделать их раздельными.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class CPoint
{
public:
        CPoint(double x, double y)
          : m_x(x), m_y(y) {}
        double GetX() const { return m_x; }
        double GetY() const { return m_y; }
private:
        double m_x, m_y;
};
 
class CTriangle
{
public:
        CTriangle(CPoint const& p1, CPoint const& p2, CPoint const& p3)
          : m_p1(p1), m_p2(p2), m_p3(p3) {}
        CPoint GetVertex(unsigned index) const {
          // have no idea what this one does
        }
private:
        CPoint m_p1, m_p2, m_p3;
};
volovzi
266 / 168 / 8
Регистрация: 14.03.2010
Сообщений: 501
05.02.2011, 16:39     Наследование или создание класса в классе? #11
Matlabist, читай внимательно сообщения об ошибках. Компилятор для этого и сделан.
У тебя конструктор класса B объявлен как закрытый, т.е. private, следовательно класс A не имеет к нему доступа.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.02.2011, 16:42     Наследование или создание класса в классе?
Еще ссылки по теме:

C++ SFML. Как засунуть в функцию объект класса? ИЛИ как делается наследование?
Создание своего класса исключений, наследование std::exception C++
C++ Структура программы или наследование, без использования конструктора базового класса

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

Или воспользуйтесь поиском по форуму:
Matlabist
2 / 2 / 0
Регистрация: 28.11.2010
Сообщений: 98
05.02.2011, 16:42  [ТС]     Наследование или создание класса в классе? #12
Где? В какой строке?
Нужно было класс объявить до конструктора.
Yandex
Объявления
05.02.2011, 16:42     Наследование или создание класса в классе?
Ответ Создать тему
Опции темы

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