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

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

Восстановить пароль Регистрация
 
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 492
08.11.2012, 12:27     наследование классов #1
Есть базовый класс

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class List
{
protected:
    struct Element
    {
        char name[55];
        int n_bus;
        int n_mar;
        Element *next;
    } *start, *pbeg;
    FILE* in;
public:
    List();
    //List(const list&);
    ~List();
    void show_list();
    void filee();
};
Есть производный класс

C++
1
2
3
4
5
6
7
8
9
10
11
12
class NaMarshrut: public List
{
    int nomer;
    Element* starts;
    Element* pbegs;
public:
    NaMarshrut();
    //NaMarshrut(const NaMarshrut&);
    void show_NaMarshrut();
    int dell(int emp_nomer);
    int add(int emp_nomer);
};
Конструктор по умолчанию(реализация) Базовый

C++
1
2
3
4
5
List::List()//базовый
{
    pbeg = 0;
    start = 0;
}
Производного класса

C++
1
2
3
4
5
6
7
8
NaMarshrut::NaMarshrut():List()//Конструктор по умолчанию
{
        starts = new Element;
        starts = 0;
        pbegs = new Element;
        pbegs = 0;
        nomer = 0;
}

Как будет выглядеть конструктор копирования обоих классов, подскажите?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.11.2012, 12:27     наследование классов
Посмотрите здесь:

Наследование классов C++
C++ Наследование классов.
Наследование классов C++
C++ Наследование классов
C++ Наследование Классов с++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vxg
Модератор
 Аватар для vxg
2659 / 1670 / 156
Регистрация: 13.01.2012
Сообщений: 6,215
08.11.2012, 14:04     наследование классов #2
1. для какой цели вы после выделения памяти обнуляете указатели?
C++
1
2
3
4
        starts = new Element;
        starts = 0;
        pbegs = new Element;
        pbegs = 0;
2. конструктор копирования первого класса должен динамически выделить память для элементов в таком же как и у исходного объекта количестве и скопировать данные элементов из исходного объекта. открытый вопрос - что ему делать с указателем на файл - забрать себе (скопировать один к одному) он его не может потому как исходный объект может его закрыть, а открыть файл заново наверное не получиться. да и сложно будет по указателю найти что же это за файл. конструктор второго класса работает в том же ключе: динамическое выделение, копирование данных.
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 492
08.11.2012, 14:16  [ТС]     наследование классов #3
черновой вариант был,там просто

C++
1
2
3
        starts = 0;
        pbegs = 0;
       nomer = 0;
сделано.

Покажите конструктор копирования для односвязного списка пример,сам допилю под себя
vxg
Модератор
 Аватар для vxg
2659 / 1670 / 156
Регистрация: 13.01.2012
Сообщений: 6,215
08.11.2012, 14:32     наследование классов #4
если у списка есть начало (start) и каждый из его элементов содержит указатель (next) на следующий элемент либо 0 если он последний, то как то так
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
    List(const List &obj)
    {
        start = 0;
 
        if (!obj.start) return;
 
        Element *src_p = obj.start;
 
        Element *p = new Element;
        strcpy(p->name, src_p->name);
        p->n_bus = src_p->n_bus;
        p->n_mar = src_p->n_mar;
        p->next = 0;
        src_p = src_p->next;
 
        Element *prev = p;
 
        start = p;
 
        while (src_p)
        {
            p = new Element;
            strcpy(p->name, src_p->name);
            p->n_bus = src_p->n_bus;
            p->n_mar = src_p->n_mar;
            p->next = 0;
            src_p = src_p->next;
 
            prev->next = p;
            prev = p;
        }
    }
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 492
08.11.2012, 14:38  [ТС]     наследование классов #5
а пример перегрузки операции присвоения(=) можешь еще написать для односвязного списка?пример
vxg
Модератор
 Аватар для vxg
2659 / 1670 / 156
Регистрация: 13.01.2012
Сообщений: 6,215
08.11.2012, 14:52     наследование классов #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
    const List &operator=(const List&obj)
    {
        if (this != &obj)
        {
            //здесь нужно очистить список. только не делаейте это деструктором :)
            //...
 
            start = 0;
 
            if (obj.start)
            {
                Element *src_p = obj.start;
 
                Element *p = new Element;
                strcpy(p->name, src_p->name);
                p->n_bus = src_p->n_bus;
                p->n_mar = src_p->n_mar;
                p->next = 0;
                src_p = src_p->next;
 
                Element *prev = p;
 
                start = p;
 
                while (src_p)
                {
                    p = new Element;
                    strcpy(p->name, src_p->name);
                    p->n_bus = src_p->n_bus;
                    p->n_mar = src_p->n_mar;
                    p->next = 0;
                    src_p = src_p->next;
 
                    prev->next = p;
                    prev = p;
                }
            }
        }
 
        return *this;
    }
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 492
08.11.2012, 16:13  [ТС]     наследование классов #7
а как очистить не подскажите??...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.11.2012, 16:38     наследование классов
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
vxg
Модератор
 Аватар для vxg
2659 / 1670 / 156
Регистрация: 13.01.2012
Сообщений: 6,215
08.11.2012, 16:38     наследование классов #8
C++
1
2
3
4
5
6
7
8
                Element *p = start;
 
                while (p)
                {
                    Element *next = p->next;
                    delete p;
                    p = next;
                }
Yandex
Объявления
08.11.2012, 16:38     наследование классов
Ответ Создать тему
Опции темы

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