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

Указатели при наследовании классов - C++

Восстановить пароль Регистрация
 
devx
0 / 0 / 0
Регистрация: 30.04.2013
Сообщений: 5
30.04.2013, 16:15     Указатели при наследовании классов #1
Здравствуйте , заданием было реализовать однонаправленный список как класс и затем используя механизм наследования создать базу данных на основе списка

список я реализовал , добавил функции создания первого элемента и последующих , прохода всех элементов ,
последним шагом через наследование добавил некоторые поля но столкнулся с проблемой, что указатели на которых всё работало имеют доступ только к полям и функциям класса list , как можно решить эту проблему?
заранее благодарен за помощь
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
31
class list{
public:
list *next;
 
void create(){
list *q=new list;
q->next=NULL;
ph=q;
p=q;
}
 
void add(list *x){
list *q=new list;
x->next=q;
q->next=NULL;
p=q;
}
void show(list *ph){
    for(p=ph;p!=NULL;p=p->next){
    //вывести нужные значения по указателю
    }
    }
}*ph,*p;
 
class database:public list{
public:
int rooms();
int floor;
float S;
char adress[30];
};
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.04.2013, 16:15     Указатели при наследовании классов
Посмотрите здесь:

C++ Ошибка при наследовании
Конструкторы при наследовании C++
о связи классов и наследовании даты C++
С++ течет при наследовании C++
C++ Ошибка при наследовании?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
XRuZzz
Антикодер
577 / 478 / 23
Регистрация: 15.09.2012
Сообщений: 2,429
30.04.2013, 16:32     Указатели при наследовании классов #2
по моему указатели имеют доступ к унаследованных полям и функциям класса list
то есть у экземпляра класса database будут свои(скопированные) поля и функции унаследованные от list.

Не понятно, что вас смущает, и что вы пытаетесь сделать.
devx
0 / 0 / 0
Регистрация: 30.04.2013
Сообщений: 5
30.04.2013, 16:42  [ТС]     Указатели при наследовании классов #3
Цитата Сообщение от XRuZzz Посмотреть сообщение
по моему указатели имеют доступ к унаследованных полям и функциям класса list
то есть у экземпляра класса database будут свои(скопированные) поля и функции унаследованные от list.

Не понятно, что вас смущает, и что вы пытаетесь сделать.
я могу создать объект типа database и вызвать функции описанные в классе list , но эти функции работают от указателей типа list и по этим указателям я не могу производить запись в поля из database , как то так
XRuZzz
Антикодер
577 / 478 / 23
Регистрация: 15.09.2012
Сообщений: 2,429
30.04.2013, 17:14     Указатели при наследовании классов #4
прочитать только первое предложение

Добавлено через 19 минут
после того как отформатировал код до меня дошло что у вас проблема на 23 строке
C++
1
}*ph,*p;
глобальные указатели лучше не использовать тем более внутри класса.
devx
0 / 0 / 0
Регистрация: 30.04.2013
Сообщений: 5
30.04.2013, 17:19  [ТС]     Указатели при наследовании классов #5
Цитата Сообщение от XRuZzz Посмотреть сообщение
прочитать только первое предложение

Добавлено через 19 минут
после того как отформатировал код до меня дошло что у вас проблема на 23 строке
C++
1
}*ph,*p;
глобальные указатели лучше не использовать тем более внутри класса.
тоесть указатели лучше объявить внутри public?
XRuZzz
Антикодер
577 / 478 / 23
Регистрация: 15.09.2012
Сообщений: 2,429
30.04.2013, 17:46     Указатели при наследовании классов #6
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <iostream>
using namespace std;
class list
{
    public:
        list *next;
        list *ph;
        list *p;
        void create()
        {
            list *q = new list;
            q->next = NULL;
            ph = q;
            p = q;
        }
 
        void add(list *x)
        {
            list *q = new list;
            x->next = q;
            q->next = NULL;
            p = q;
        }
        void show(list *ph)
        {
            for (p = ph; p != NULL; p = p->next)
            {
                //вывести нужные значения по указателю
                cout<< p <<' ';
            }
            cout<< endl;
        }
};
 
class database: public list
{
    public:
        int rooms();
        int floor;
        float S;
        char adress[30];
//      database *p;
        void show(list *ph)
        {
            for (p = ph; p != NULL; p = p->next)
            {
                //вывести нужные значения по указателю
                database *pG;
                pG = (database *)p;
                cout<< pG->floor <<' ';
            }
            cout<< endl;
        }
};
 
int main ()
{
    list ll, newLL;
    database db, newDb;
    ll.add(&newLL);
    ll.create();
    ll.show(&newLL);
    newDb.floor = 4;
    db.add(&newDb);
    db.show(&newDb);
    return 1;
}
чтоб получить доступ к полям database нужно выполнить преобразование типа из указателя
C++
1
pG = (database *)p;

у меня с глобальными *ph,*p даже не компилируется, а у вас компилируется? без предупреждений?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class list{
public:
list *next;
 
void create(){
list *q=new list;
q->next=NULL;
ph=q;
p=q;
}
 
void add(list *x){
list *q=new list;
x->next=q;
q->next=NULL;
p=q;
}
void show(list *ph){
    for(p=ph;p!=NULL;p=p->next){
    //вывести нужные значения по указателю
    }
    }
}*ph,*p;
Добавлено через 2 минуты
Цитата Сообщение от devx Посмотреть сообщение
тоесть указатели лучше объявить внутри public?
в идеале в секцию private
devx
0 / 0 / 0
Регистрация: 30.04.2013
Сообщений: 5
30.04.2013, 17:46  [ТС]     Указатели при наследовании классов #7
да компилировалось , спасибо , вроде разобрался , и я так понимаю функция show() в database перекрывает ранее объявленную в list?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.04.2013, 17:53     Указатели при наследовании классов
Еще ссылки по теме:

Конструкторы при наследовании C++
C++ Выделение памяти при наследовании классов
C++ Присвоение при наследовании

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

Или воспользуйтесь поиском по форуму:
XRuZzz
Антикодер
577 / 478 / 23
Регистрация: 15.09.2012
Сообщений: 2,429
30.04.2013, 17:53     Указатели при наследовании классов #8
ну да, как раз хороший момент, чтоб изучить виртуальное поведение методов, добавив слово virtual в каждом классе у метода show и посмотреть, что будет, при обращении из указателя базового класса на экземпляр производного класса к этому методу show
Yandex
Объявления
30.04.2013, 17:53     Указатели при наследовании классов
Ответ Создать тему
Опции темы

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