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

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

Войти
Регистрация
Восстановить пароль
 
Ded_Vasilij
231 / 213 / 15
Регистрация: 01.09.2012
Сообщений: 2,103
#1

Использование объекта одного класса при создании нового класса - C++

20.03.2013, 19:00. Просмотров 644. Ответов 7
Метки нет (Все метки)

Добрый вечер. У меня такая проблема. Есть готовый класс L2 - список, на его основе нужно создать дек. Я поступил так:
в приватной части дека объявил переменную типа L2, и на ее основе реализовал все остальные функции, конструкторы там, деструктор и прочее. Возникла проблема с оператором =. Чего то не могу сообразить как это сделать, подскажите пожалуйста. Код приведен ниже

файл deque.h

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#pragma once
#include <iostream>
#include "L2.h"
class deq 
{
    L2 L;
public:
    deq();
    ~deq();
    deq(const deq& d);
    deq& operator = (const deq& d);
    bool isEmpty ()const;                       // проверка на пустоту
    char popHead ();                            // получить элемент из начала списка
    char popTail ();                            // получить элемент из конца списка
    void pushHead (char c);                     // добавить элемент в начало списка
    void pushTail (char c);                     // добавить элемент в конец списка          
    void printHead ()const;                     // печать с головы
    void printTail()const;                      // печать с хвоста
    int size ()const;                           // размер списка
    void makeEmpty();                           // сделать пустым
    static void deq_menu(); 
};
deque.cpp

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
#include "deque.h"
using namespace std;
    deq :: deq()
    {
        
    }
    deq :: ~deq()
    {
        L.~L2();
    }
    deq :: deq(const deq& d): L(d.L)
    {
        
    }
    deq& deq ::  operator = (const deq& d)// вот здесь основная проблема
    {
        //L.operator= ( d);
    }
    bool deq :: isEmpty ()const                     // проверка на пустоту
    {
        return L.isEmpty();
    }
    char deq :: popHead ()                          // получить элемент из начала списка
    {
        return L.popHead();
    }
    char deq ::  popTail ()                         // получить элемент из конца списка
    {
        return L.popTail();
    }
    void deq :: pushHead (char c)                       // добавить элемент в начало списка
    {
        L.pushHead(c);
    }
    void deq :: pushTail (char c)                       // добавить элемент в конец списка          
    {
        L.pushTail(c);
    }
    void deq :: printHead ()const                       // печать с головы
    {
        L.printHead();
    }
    void deq :: printTail()const                        // печать с хвоста
    {
        L.printTail();
    }
    int deq :: size ()const                         // размер списка
    {
        return L.size();
    }
    void deq :: makeEmpty()                         // сделать пустым
    {
        L.makeEmpty();
    }
    void deq :: deq_menu()
    {}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.03.2013, 19:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Использование объекта одного класса при создании нового класса (C++):

Ошибка при создании объекта класса - C++
Здравствуйте. В коде ниже при попытке вывести код на экран возникает следующая ошибка: prog.cpp: In function 'int main()': ...

Объявление объекта одного класса в описании другого класса - C++
Здравствуйте. Почему при объявлении Student s в классе Teacher не возникает ошибки? Ведь такой объект уже существует. И почему при...

Использование перегруженного оператора ввода/вывода в поток базового класса для объекта производного класса - C++
Здравствуйте! Можно ли использовать перегруженный оператор ввода/вывода в поток из базового класса для объекта производного класса, если...

ООП в C++: Вызов родительского конструктора с параметром при создании объекта дочернего класса - C++
Здравствуйте! Столкнулся с такой проблемой: если есть родительский класс с конструктором, то при создании дочернего объекта от этого...

rand() при создании разных объектов одного класса в них одинаков - C++
создаю динамическую матрицу в объекте, заполняемую рандомно, в каждом объекте одно и то же заполнение, как грамматно исправить? ...

Передача данных объекта одного класса , объекту другого - C++
Доброго времени суток. В общем, столкнулся с проблемой передачи данных от одного класса другому. Есть класс NewApp, создаю объект с...

7
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
20.03.2013, 19:19 #2
Нафига нужен такой класс, если твой дек предоставляет интерфейс такой же, как у нижележащего списка?
Не стоит явно вызывать деструктор, он и так вызовется, а у тебя он вызывается дважды.
C++
1
2
3
4
deq& deq ::  operator = (const deq& d)// вот здесь основная проблема
    {
        L = d.L;
    }
0
egor2116
339 / 370 / 42
Регистрация: 20.01.2013
Сообщений: 1,126
20.03.2013, 19:22 #3
Есть готовый класс L2 - список, на его основе нужно создать дек.
Разве здесь не легче использовать наследование ? и переопределить и добавить необходимые методы?
C++
1
2
3
4
5
6
7
class L2{
...
};
 
class Deq : public L2{
...
};
1
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
20.03.2013, 19:27 #4
Когда ты реализуешь одну фукциональность на основе другой, идеалогически правильно использовать композицию, а не наследование.
В данном случае вообще не понятно, зачем нужен этот класс, так как интерфейс у него абсолютно такой же, как у L2.
2
egor2116
339 / 370 / 42
Регистрация: 20.01.2013
Сообщений: 1,126
20.03.2013, 19:29 #5
одну фукциональность на основе другой
Поясните тогда смысл наследования.
0
Ded_Vasilij
231 / 213 / 15
Регистрация: 01.09.2012
Сообщений: 2,103
20.03.2013, 19:46  [ТС] #6
Цитата Сообщение от Герц Посмотреть сообщение
Нафига нужен такой класс, если твой дек предоставляет интерфейс такой же, как у нижележащего списка?
Не стоит явно вызывать деструктор, он и так вызовется, а у тебя он вызывается дважды.
В деке нет вставки и удаления на указанную позицию. А какие есть еще варианты? Мне, если честно такая реализация тоже не очень нравится, а до более грамотного решения не додумался. Подскажите пожалуйста
0
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
20.03.2013, 23:23 #7
Цитата Сообщение от egor2116 Посмотреть сообщение
Поясните тогда смысл наследования.
Наследование — это когда одна функциональность = другая в полном объёме + что-то ещё или что-то по-другому.

Раз у списка нет вставки, то придумайте, как реализовать дек так, чтобы она была.
2
DU
1483 / 1129 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
20.03.2013, 23:38 #8
нормальная реализация из того, что было. главное список наружу не торчит и в случае чего можно будет сделать дек на основе чего-то другого. то, что интерфейсы у списка и дека получились одинаковые - это совпадение. если сделать например на основе std::list то этого уже не будет. но клиенты исходного дека останутся без изменений, т.к. интерфейс дека остался без изменений.
по поводу оператора =:
если L2 написан по нормальному, то у него уже должен быть такой оператор. а раз так, то методы:
~deq();
deq(const deq& d);
deq& operator = (const deq& d);
вообще писать не надо. то, что сгенерит компилятор по умолчанию вполне будет работоспособным.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.03.2013, 23:38
Привет! Вот еще темы с ответами:

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

Не работает передача объекта из одного класса в другой через return - C++
Есть 2 объекта класс Reading ,text и line,которые посредством методов std::string outstr() std::string outch() соответственно должны...

Использование очереди (queue) одного класса в другом - C++
Использование очереди (queue) одного класса в другом проблема в следующем есть класс Hospital, в котором созданы 2 очереди class...

Использование данных одного класса в другом классе - C++
Подскажите как сделать так что бы значения d1,d2 из первого класса можно было использовать во втором классе? #include &quot;stdafx.h&quot; ...


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

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

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