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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
Matlabist
2 / 2 / 0
Регистрация: 28.11.2010
Сообщений: 102
#1

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

05.02.2011, 15:24. Просмотров 1288. Ответов 11
Метки нет (Все метки)

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

Создание класса в другом классе - C++
Приветствую всех. Уважаемые гуру, скажите можно ли создавать класс в теле друго класса? Причем создание "внутреннего" класса идет на...

Создание наследовательного класса(классы-наследование) - C++
Доброе время суток.Прошу помощи у специалистов,не могу реализовать программно задание. Создать Абстрактный базовый класс с виртуальной...

Создание своего класса исключений, наследование std::exception - C++
хотел создать свой класс исключений пронаследовав от std::exception, но немного запутался в конструкторах... конструктор же не наследуется,...

Структура программы или наследование, без использования конструктора базового класса - C++
Всем доброго времени суток. Снова прошу вас о помощи! Код располагается по ссылке в спойлере - не вставлю сюда, так как слишком...

Создание сложной структуры или класса - C++
Народ я не специалист - поэтому писать желательно с коментарием Необходимо открыть файл и прочитать в некую структуру сам файл...

Создание статического класса, или функции в namespace - C++
создаю win окно, хотел обернуть api функции набором функций, начал делать через статический класс, а теперь думаю, зачем все это? может...

Наследование. Очистка памяти в производном классе - C++
Создаю базовый класс ParentClass, содержащий в качестве объекта массив (выделяется динамический массив в зависимости от указанного...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
05.02.2011, 15:49     Наследование или создание класса в классе? #2
вы понимаете, что такое наследование и агрегирование? используейте второе
Matlabist
2 / 2 / 0
Регистрация: 28.11.2010
Сообщений: 102
05.02.2011, 15:56  [ТС]     Наследование или создание класса в классе? #3
Не знаю. Спрашиваю потому что не знаю,не изобретаю ли я велосипед.
Просто я хочу описать в одном классе другой класс.
У меня есть класс А. В классе А я объявляю класс Б. В классе А создаю объекты класса Б.
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
05.02.2011, 16:02     Наследование или создание класса в классе? #4
Matlabist, покажи свою программу, посмотрим.
Евгений М.
1035 / 976 / 54
Регистрация: 28.02.2010
Сообщений: 2,829
Завершенные тесты: 2
05.02.2011, 16:03     Наследование или создание класса в классе? #5
Цитата Сообщение от Matlabist Посмотреть сообщение
В классе А я хочу создать объекты класса Б.
Подчеркнутая буква - ключевая. Однозначно создавать объекты класса Б как члены класса А.

Можно реальный пример (если есть)?
panicwassano
591 / 559 / 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;
};
Евгений М.
1035 / 976 / 54
Регистрация: 28.02.2010
Сообщений: 2,829
Завершенные тесты: 2
05.02.2011, 16:09     Наследование или создание класса в классе? #7
panicwassano, так и оставьте.
Matlabist
2 / 2 / 0
Регистрация: 28.11.2010
Сообщений: 102
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
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
05.02.2011, 16:19     Наследование или создание класса в классе? #9
так в чем вопрос то? при создании объекта А создадутся 3 объекта класса B. Класс B объяви до конструктора класса А.
lemegeton
2923 / 1352 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
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
267 / 169 / 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++
Объясните пожалуйста в чем есть плохо создавать экземпляр класса вот так? class A{ /*.....*/ }objA; нежели так :

Объект класса в классе - C++
Товарищи, помогите уже не знаю что делать!! Есть класс Point и класс Pixel, есть методы и там и там. В классе Pixel создаю объект типа...

Массив класса в классе - C++
Вот код: #include <iostream> using namespace std; class CFirst { public: int m_n; int m_m; CFirst(){} };

Шаблон класса в классе - C++
Есть список(кольцевой) который содержит узлы(Node). Список - шаблон Узел(Node) по идее тоже должен быть шаблоном. Не понятно как...

Наследование абстрактного класса - C++
Не могли бы вы мне объяснить данный код: Actions *NewAct = new Array(); // строка 1 ((Array *)NewAct)->Set_arr(count); // строка 2 ...


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

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

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