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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.92
pizurok
76 / 68 / 3
Регистрация: 05.05.2013
Сообщений: 3,302
#1

Вопросы по наследованию - C++

20.06.2013, 12:43. Просмотров 1747. Ответов 68
Метки нет (Все метки)

Вопрос ещё по конструкторам

Допустим есть система классов
C++
1
2
3
4
5
6
7
8
9
10
class A
{
    public:
         A() {}
};
class B: public A
{
    public:
         B() {}
};
Мы создаем экземпляр
C++
1
B b_obj;
Сколько будет фактически экземпляров? 1 B? или 2: A и B?
Или экземпляр A будет создан только если конструктор B вызывает конструктор A?
C++
1
B() : A() {}
И ещё вопрос. Предположим два экземпляра будет если конструктор B вызывает конструктор A
Пусть есть открытая переменная в A
C++
1
2
public:
    int a;
При обращении из экземпляра
C++
1
b_obj.a = 0;
Мы обратимся к a из экземпляра B или из экземпляра A?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.06.2013, 12:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вопросы по наследованию (C++):

Вопрос по наследованию - C++
Вопрос насчёт передачи аргументов в конструктор базового класса(создания временного объекта), а именно почему у меня это не выходит и где у...

Вопрос по наследованию - C++
Уже неоднократно перечитывал главы про наследования и все равно до конца не разобрался. Вот например у нас есть класс Четырехугольник, и...

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

Задача по наследованию в C++, нужно реализовать некоторые моменты - C++
Написать программу с объектами и реализовать наследование. Ситуация: Klimat (базовый объект), Derevo (выводной объект). a. Klimat:...

Задача по наследованию. Не понимаю некоторые моменты в формулировке задания - C++
Здравствуйте! Вот есть задание: Описать базовый класс СТРОКА Обязательные поля класса: # Указатель на char - хранит адрес...

"Предпочитайте композицию наследованию" - C++
Привет. В книге "Стандарты программирования на С++" есть совет 34: "Предпочитайте композицию наследованию" Хочу уточнить на счет...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ValeryS
Модератор
6631 / 5038 / 466
Регистрация: 14.02.2011
Сообщений: 16,849
20.06.2013, 14:50 #31
SatanaXIII,
это я знаю
я спрашиваю в чем проблема
да там все не так однозначно без виртуалки создадутся два объекта A и обращаться к нему нужно указав конкретный путь
но объект то один
например
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class A
{
 int a;
 
}
class B :public A
{
int b;
}
class C :public A
{
int c;
}
 
class D :public B ,public C 
{
int d;
}
 
D d;
в памяти будет
a b a c d
но это один объект
и написав
d.a=5;
не знаешь какую a он поменяет

чаще проблемы не с членами а с методами

есть куча решений самая простая из которых не допускать такой иерархии
1
pizurok
76 / 68 / 3
Регистрация: 05.05.2013
Сообщений: 3,302
20.06.2013, 14:50  [ТС] #32
Цитата Сообщение от alsav22 Посмотреть сообщение
Как неотдельная часть объекта производного класса.
Это уже не совсем важно, фактически все таки экземпляр существует, пусть и часть другого экземпляра, но со своими уровнями доступа
0
alsav22
5420 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.06.2013, 14:51 #33
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
#include <iostream>
using namespace std;
 
class A
{
    public:
         int a;
         A() {}
};
 
class B: public A
{
        int b;
    public:
         B() {}
};
 
int main()
{
    cout << sizeof(A) << " " << sizeof(B) << endl;
 
    system("pause");
    return 0;
}
0
pizurok
76 / 68 / 3
Регистрация: 05.05.2013
Сообщений: 3,302
20.06.2013, 14:53  [ТС] #34
Цитата Сообщение от ValeryS Посмотреть сообщение
SatanaXIII,
есть куча решений самая простая из которых не допускать такой иерархии
Я думаю именно поэтому от множественного наследования отказались в жабе и в шарпе, ибо рвет моск и заставляет shit bricks.
По мне так множественное наследование - самое сложное в программировании, наряду с именами переменных методов и экземпляров
0
ITcrusader
Эксперт C++
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
20.06.2013, 14:53 #35
Цитата Сообщение от pizurok Посмотреть сообщение
Если кто-либо с ней не сталкивался, то я сомневаюсь что он много писал на плюсах
Ответ на эту глупость, кстати, дан)))

Цитата Сообщение от ValeryS Посмотреть сообщение
есть куча решений, самое простое из которых - не допускать такой иерархии
Потому на практике - не особо приходится работать с ромбами) Проблема ромба - надуманная проблема множественного наследования, чтобы было об чом поговорить)))
0
alsav22
5420 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.06.2013, 14:54 #36
Цитата Сообщение от pizurok Посмотреть сообщение
Это уже не совсем важно, фактически все таки экземпляр существует, пусть и часть другого экземпляра, но со своими уровнями доступа
Тут нужно определиться в терминах. Что есть экземпляр?
0
pizurok
76 / 68 / 3
Регистрация: 05.05.2013
Сообщений: 3,302
20.06.2013, 14:54  [ТС] #37
Цитата Сообщение от MrGluck Посмотреть сообщение
и конечно проблема в демагогах
Вам важно найти виноватых или помочь разобраться в проблеме? Если первое, то у вас завышено ЧСВ, уж простите
0
MrGluck
Модератор
Эксперт CЭксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,929
20.06.2013, 14:55 #38
pizurok, я рекомендую вам к прочтению книгу "Эффективное использование C++. 50 рекомендаций по улучшению ваших программ и проектов" Скотта Мейерса, он достаточно подробно описывает и ромбовидную проблему и реализацию объектов на, как вы говорите "нижнем уровне" и множественное наследование с применением модификаторов доступа public и private. Мне вот не понятно, объекты конечно являются частями других, но ведь они не могут существовать отдельно. Т.е. если А базовый класс, B производный, то объект класса B содержит в себе объект А, но не в отдельности, а как часть себя.
0
pizurok
76 / 68 / 3
Регистрация: 05.05.2013
Сообщений: 3,302
20.06.2013, 14:56  [ТС] #39
Цитата Сообщение от MrGluck Посмотреть сообщение
pizurok, я рекомендую вам к прочтению книгу "Эффективное использование C++. 50 рекомендаций по улучшению ваших программ и проектов" Скотта Мейерса, он достаточно подробно описывает и ромбовидную проблему и реализацию объектов на, как вы говорите "нижнем уровне" и множественное наследование с применением модификаторов доступа public и private. Мне вот не понятно, объекты конечно являются частями других, но ведь они не могут существовать отдельно. Т.е. если А базовый класс, B производный, то объект класса B содержит в себе объект А, но не в отдельности, а как часть себя.
Не могут, но это не суть важно. Важно что они сохраняют уровни доступа к данным внутри себя
0
ValeryS
Модератор
6631 / 5038 / 466
Регистрация: 14.02.2011
Сообщений: 16,849
20.06.2013, 14:56 #40
Цитата Сообщение от pizurok Посмотреть сообщение
Обращаемся в Out из B:

Цитата Сообщение от pizurok Посмотреть сообщение
Если объект фактически один, откуда берется переменная a = 3, если она закрыта?
кому закрыта?
Цитата Сообщение от pizurok Посмотреть сообщение
Такое чувство, что существует экземпляр A, которых и хранит переменную a, метод Out которого вызывается из экземпляра B?
экземпляр B содержит внутри себя "экземпляр A" но это не отдельная память и не отдельный объект
0
MrGluck
Модератор
Эксперт CЭксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,929
20.06.2013, 15:02 #41
pizurok, отнюдь, несмотря на все ваши "мне википедия помогла больше, чем все вы тут, бабки собравшиеся поболтать о том о сем", "никто ничего мне так и не сказал путного" я, как и другие участники форума пытаются помочь вам в решении вашей проблемы. Только вот вы не умеете однозначно формулировать вопросы. Как видите, неправильно (не так, как вы ожидали) вас понял не только я, но и все остальные. На конкретный вопрос вам дали бы конкретный ответ. Это вы, не понимая базовых вещей тычетесь в "не надо меня учить, я все сам знаю", при том, что всем свойственно ошибаться и заблуждаться даже в очевидных вещах.

Добавлено через 1 минуту
Цитата Сообщение от pizurok Посмотреть сообщение
Важно что они сохраняют уровни доступа к данным внутри себя
это уже совершенно другой вопрос, не находите?
0
alsav22
5420 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.06.2013, 15:06 #42
Цитата Сообщение от pizurok Посмотреть сообщение
Важно что они сохраняют уровни доступа к данным внутри себя
Смотря кто к кому. Прозводный к базовому и к себе - да. Базовый к производному и к себе - нет.
0
pizurok
76 / 68 / 3
Регистрация: 05.05.2013
Сообщений: 3,302
20.06.2013, 15:06  [ТС] #43
Цитата Сообщение от MrGluck Посмотреть сообщение
pizurok, отнюдь, несмотря на все ваши "мне википедия помогла больше, чем все вы тут, бабки собравшиеся поболтать о том о сем", "никто ничего мне так и не сказал путного" я, как и другие участники форума пытаются помочь вам в решении вашей проблемы. Только вот вы не умеете однозначно формулировать вопросы. Как видите, неправильно (не так, как вы ожидали) вас понял не только я, но и все остальные. На конкретный вопрос вам дали бы конкретный ответ. Это вы, не понимая базовых вещей тычетесь в "не надо меня учить, я все сам знаю", при том, что всем свойственно ошибаться и заблуждаться даже в очевидных вещах.

это уже совершенно другой вопрос, не находите?
Я изначально спрашивал не "что такое наследование" а как объекты располагаются на низком уровне. Ладно, все неважно, всем спасибо, особенно тому, кто дал ссылку на вики, которуя я когда-то читал, но по диагонали, не уловив важного для меня вопроса
0
alsav22
5420 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.06.2013, 15:07 #44
Цитата Сообщение от MrGluck Посмотреть сообщение
Т.е. если А базовый класс, B производный, то объект класса B содержит в себе объект А, но не в отдельности, а как часть себя.
Например, объект абстрактного базового класса не создаётся, но деструктор для него вызывается, при уничтожении объекта производного класса. Т.е., как часть производного, объект базового существует, как отдельный объект - нет.
0
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,529
Завершенные тесты: 1
20.06.2013, 15:08 #45
Чего вы заладили? Вон ValeryS уже все сказал. И суть в трех словах, и вывод в последней фразе.
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
struct A
  {
  int a;
  };
struct B
  {
  A ba;
  };
struct C
  {
  A ca;
  };
struct D
  {
  B dba;
  C dca;
  };
 
 
int main(int argc, char* argv[])
{
D exD;
exD.dba.ba.a = 3;
exD.dca.ca.a = 4;
}
И вообще
Цитата Сообщение от gigs Посмотреть сообщение
Объясните пожалуйста на простом примере принцип работы конструктора в С++. Я сейчас начал их изучать и никак не могу въехать. Спасибо.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.06.2013, 15:08
Привет! Вот еще темы с ответами:

Написать простейшую программу по "перегрузке" и "наследованию" - C++
написать простейшую программу на СИ++ по &quot;перегрузке&quot; и &quot;наследованию&quot;. заранее спасибо!

Вопросы по C++ - C++
Всем привет! У меня появилось несколько вопросов по C++, был бы рад, если бы Вы помогли бы мне хотя бы из одним из них. 1) Как...

Вопросы - C++
Ребята, никто не писал никогда код на С++, связанный с имитационным моделированием? Просто, дали, там набор математич. формул и теория, а...

Вопросы!!! - C++
прошу посоветовать что почитать чтобы ответить на следующие вопросы!!(можно ответить ссылками) если будут промеры по теме буду рад:) ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
20.06.2013, 15:08
Ответ Создать тему
Опции темы

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