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

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

Войти
Регистрация
Восстановить пароль
 
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 535
#1

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

08.11.2012, 12:27. Просмотров 378. Ответов 7
Метки нет (Все метки)

Есть базовый класс

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;
}

Как будет выглядеть конструктор копирования обоих классов, подскажите?
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.11.2012, 12:27
Я подобрал для вас темы с готовыми решениями и ответами на вопрос наследование классов (C++):

Заменить наследование классов на наследование интерфейсов - C++
#include <iostream> #include <assert.h> using namespace std; int people_on_base = 100; int vehicles_on_base = 100; double...

Наследование классов. Копирование производных классов - C++
Здравствуйте всем, у меня такой вопрос: написал код #include "stdafx.h" class A //Создаем класс А { int mA; ...

Наследование классов - C++
Здравствуйте! Вот написан мой код ниже. Я когда пытаюсь ввести "What give animal:" идёт прекращение работы. Не понимаю почему. Помогите...

Наследование классов - C++
Пусть автомобиль характеризуется установленным двигателем, трансмиссией и количеством мест для пассажиров. Двигатель определяется...

Наследование классов - C++
Очень нужна помощь, организую открытое наследование, но постоянно выходят ошибки, не могу понять от чего TForm1 *Form1; class ABK{ ...

Наследование классов - C++
Доброго времени суток! Стоит следующая учебная задача: есть 3 класса потомка (в моем случае типы авто: легковое, грузовое, автобус) с...

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

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

Покажите конструктор копирования для односвязного списка пример,сам допилю под себя
2
vxg
Модератор
3224 / 2027 / 231
Регистрация: 13.01.2012
Сообщений: 7,868
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;
        }
    }
1
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 535
08.11.2012, 14:38  [ТС] #5
а пример перегрузки операции присвоения(=) можешь еще написать для односвязного списка?пример
2
vxg
Модератор
3224 / 2027 / 231
Регистрация: 13.01.2012
Сообщений: 7,868
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;
    }
1
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 535
08.11.2012, 16:13  [ТС] #7
а как очистить не подскажите??...
2
vxg
Модератор
3224 / 2027 / 231
Регистрация: 13.01.2012
Сообщений: 7,868
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;
                }
2
08.11.2012, 16:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.11.2012, 16:38
Привет! Вот еще темы с ответами:

Наследование классов - C++
Как правильно построить наследование, чтобы класс C мог корректно использовать A : Show() ? Например имеем: AB.h: class A { ...

Наследование классов - C++
смотрите, типа класс комп и ноут вроде все хорошо работает, но с табуляцией проблемы, собсна вот, как выводить ноут с парой пробелов,...

наследование классов - C++
Здравствуйте! У меня проблема о наследовании классов и определении собственно с каким из наследников идет процесс. Есть класс Ware,...

Наследование классов - C++
Доброго времени Вам. я с толкнулся с неприятной проблемой делая лабораторную работу по ООП, а именно запутался(а если честно то и...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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