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

Можно-ли наследовать класс, в котором определен объект текущего класса? - C++

Восстановить пароль Регистрация
 
dimkaok
 Аватар для dimkaok
1 / 1 / 0
Регистрация: 06.03.2013
Сообщений: 128
19.04.2013, 18:08     Можно-ли наследовать класс, в котором определен объект текущего класса? #1
Подскажите, пожалуйста, можно-ли делать так:

C++
1
2
3
4
5
6
class A {
  public:
    B objB;
};
 
class B : public A {};
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.04.2013, 18:08     Можно-ли наследовать класс, в котором определен объект текущего класса?
Посмотрите здесь:

C++ Класс строк, перегрузка операторов. Как вернуть объект класса
Объект внутри класса. Напишите класс Geo, моделирующий географические координаты на поверхности Земли C++
Класс: строка. Не считывает данные во второй объект класса! C++
Создать класс. Символьное поле должно быть задано как объект класса string C++
Создать класс, в котором можно сохранить любой вызываемый объект или функцию C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
19.04.2013, 18:14     Можно-ли наследовать класс, в котором определен объект текущего класса? #2
Нет. При наследовании все члены предка становятся членами потомка, то есть
C++
1
2
3
4
5
6
7
8
9
10
11
class A {
  public:
   B objB;
int a;
int v;
int c;
};
class B : public A {
protect
int d;
};
просто сокращает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class A {
  public:
   B objB;
int a;
int v;
int c;
};
class B :
protect
int d;
  public:
   B objB;
int a;
int v;
int c;
};
и разрешает указателю на A указывать на B, но объект (в данном случае objB) не может быть членом своего класса, рекурсия типов разрешена только для указателей.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
19.04.2013, 20:02     Можно-ли наследовать класс, в котором определен объект текущего класса? #3
dimkaok,
C++
1
2
3
4
5
6
class A {
  public:
    B objB;
};
 
class B : public A {};
Это просто не скомпилируется потому что B неполный тип в объявлении класса A.
dimkaok
 Аватар для dimkaok
1 / 1 / 0
Регистрация: 06.03.2013
Сообщений: 128
19.04.2013, 21:20  [ТС]     Можно-ли наследовать класс, в котором определен объект текущего класса? #4
А что в таком случае делать?

C++
1
2
3
4
5
6
// CMove.h
#include "CMessages.h"
class CMove {   
  public:
      CMessages o_messageBox;  // Объявляю объект в первом месте, где он понадобился
};
C++
1
2
3
4
5
6
7
8
// CPlayer.h
#include "CMove.h"
class CPlayer : public CMove {     // Если убрать public CMove..
  public:
     void eat() {   
    o_messageBox.youAreEatFood(); //.. то здесь для o_messageBox выдаст, что идентификатор не определен
     }
};
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
19.04.2013, 21:22     Можно-ли наследовать класс, в котором определен объект текущего класса? #5
Цитата Сообщение от ForEveR Посмотреть сообщение
Это просто не скомпилируется потому что B неполный тип в объявлении класса A.
ну написать перед всем этим
C++
1
class B;
не проблема. Но запрещена сама рекурсия типа.
dimkaok
 Аватар для dimkaok
1 / 1 / 0
Регистрация: 06.03.2013
Сообщений: 128
19.04.2013, 21:22  [ТС]     Можно-ли наследовать класс, в котором определен объект текущего класса? #6
Может можно получить доступ к o_messageBox другим способом, без наследования?
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
19.04.2013, 21:26     Можно-ли наследовать класс, в котором определен объект текущего класса? #7
Цитата Сообщение от dimkaok Посмотреть сообщение
А что в таком случае делать?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// CMove.h
#include "CMessages.h"
class CMove { * 
* public:
* * * CMessages o_messageBox; *// Объявляю объект в первом месте, где он понадобился
};
// CPlayer.h
#include "CMove.h"
class CPlayer : public CMove { * * // Если убрать public CMove..
* public:
* * *void eat() { * 
* * o_messageBox.youAreEatFood(); //.. то здесь для o_messageBox выдаст, что идентификатор не определен
* * *}
};
А в чём проблема? Здесь в предковый класс агрегирован экземпляр не потомка, а третьего класса:
C++
1
2
3
4
5
6
7
8
9
10
11
class C
{
};
class A
{
 public:
  C c;
};
class B : public A
{
};
. Так вот, это разрешено.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.04.2013, 21:50     Можно-ли наследовать класс, в котором определен объект текущего класса?
Еще ссылки по теме:

C++ Можно ли создать объект экспортируемого из DLL класса без лишних манипуляций?
Можно ли удалить объект экземпляра класса из самого себя? C++
C++ Передача указателя в класс на объект другого класса

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

Или воспользуйтесь поиском по форуму:
dimkaok
 Аватар для dimkaok
1 / 1 / 0
Регистрация: 06.03.2013
Сообщений: 128
19.04.2013, 21:50  [ТС]     Можно-ли наследовать класс, в котором определен объект текущего класса? #8
Можете посмотреть мой код? Там все дописал, осталось только ошибки исправить.
Или хотя-бы покритикуйте, что не так, буду рад
Вложения
Тип файла: zip C++ RPG 1.2.2.zip (13.8 Кб, 5 просмотров)
Yandex
Объявления
19.04.2013, 21:50     Можно-ли наследовать класс, в котором определен объект текущего класса?
Ответ Создать тему
Опции темы

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