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

Можно ли как-то в дочернем классе получить указатель родителя? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Перенос программы в Windows Forms http://www.cyberforum.ru/cpp-beginners/thread1143620.html
Срочно нужно перенести код консольного приложения в с++ Буду очень признателен. Минимальный интерфейс. 1 текстовое поле для результата. 1 выдвижное меню для выбора тональности. #include <iostream> #include <locale> #include <conio.h> using namespace std; int main() {
C++ Дана последовательность Последовательность x1, x2, ... образована по закону (См. картинку) (i=1,2, ...). Дано действительное число e>0. Записать в файл h члены последовательности x1, x2, ..., остановившись после первого члена для которого выполнено |xi|<e http://www.cyberforum.ru/cpp-beginners/thread1143618.html
Вычисление высоты дерева C++
Всем привет! Дерево создано на основе стека, но вот в чем беда компилируется с ошибкой error C4703: используется потенциально неинициализированная локальная переменная-указатель "p" Не пойму как исправить не переписывая полностью программу) #include "stdafx.h" #include "stdio.h" #include <locale.h> #include <iostream> using namespace std;
C++ Несколько исходников в проекте
Возможно ли создание проекта с несколькими исходными файлами и одним, так сказать "головным"? То есть я не хочу всё писать в один файл, а хочу разбросать код по каждому файлу, для упрощения. Если можно, то как потом подключать вспомогательные .cpp файлы в главный файл?
C++ Как привязать цветовые координаты (rgb и hsl) к картинке http://www.cyberforum.ru/cpp-beginners/thread1143608.html
Подскажите пожалуйста!!! Как привязать цветовые координаты (rgb и hsl) к картинке в c++.
C++ Переведите с Pascal на C++ Пожалуйста, переведите на C++ var a:array of longint; n,m,i,j,i1,j1,max:Longint; begin read(n,m); for i:=0 to n-1 do for j:=0 to m-1 do read(a); max:=a; i1:=0; подробнее

Показать сообщение отдельно
DrOffset
6462 / 3836 / 887
Регистрация: 30.01.2014
Сообщений: 6,631
09.04.2014, 23:35     Можно ли как-то в дочернем классе получить указатель родителя?
Цитата Сообщение от newbie666 Посмотреть сообщение
Тоесть чтоб я мог у любого дочернего получить указатель на базовый, поменять какую - то переменную в базовом классе и, проверив её в другом экземпляре дочернего класса, убедится что она идентична переменной в первом экземпляре класса, т.к. они связанны общий базовым классом ....
В том и фишка, что подобное отношение - это не наследование типов. Смотри пример с самолетами.
Наследуются типы, а значение ты меняешь у объекта. Вдумайся в это. Вот и получается, что чтобы такое организовать нужно иметь, например, два экземпляра, которые ссылаются на базовый:
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
class Base
{
public:
    Base() {}
};
 
class Child1
{
public:
    Child1(Base * p) : parent(p) {}
 
    Base * parent;
};
 
class Child2
{
public:
    Child2(Base * p) : parent(p) {}
 
    Base * parent;
};
 
int main()
{
    Base * base = new Base;
 
    Child1 * child1 = new Child1(base);
    Child2 * child2 = new Child2(base);
}
Внеся ссылку на базовый экземпляр мы обеспечили доступ к общему объекту (заметь, объекту). наследования тут пока вообще нет (специально).
А наследование типов здесь понадобится уже затем, чтобы получить возможность в качестве базового класса указывать один из потомков (т.к. все они будут приводимы к базе). Получаем вот:
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
class Base
{
public:
    Base(Base * p = 0) : parent(p) {}
 
    Base * parent;
};
 
class Child1 : public Base
{
public:
    Child1(Base * p) : Base(p) {}
};
 
class Child2 : public Base
{
public:
    Child2(Base * p) : Base(p) {}
};
 
int main()
{
    Base * base = new Base;
 
    Child1 * child1 = new Child1(base);
    Child2 * child2 = new Child2(child1);
 
    child2->parent; // это child1
    child2->parent->parent; // это base
}
То же самое, что и мой предыдущий пример. И это именно то, что ты описывал. Остальные вещи уточнятся должны уже исходя из конкретной задачи.

Добавлено через 3 минуты
Цитата Сообщение от newbie666 Посмотреть сообщение
виртуалные конструкторы
Virtual Constructor
 
Текущее время: 15:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru