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

Object-oriented programming Help - C++

Восстановить пароль Регистрация
 
Morak
0 / 0 / 0
Регистрация: 24.10.2010
Сообщений: 10
24.09.2011, 11:59     Object-oriented programming Help #1
Помогите пожалуйста доделать, никак не могу довести до ума собственно вот задача:
Объект – музыкальный альбом.
Включает в себя список музыкальных композиций.
Действия – Определение свойств класса
Нахождение ответа на вопрос «сколько различных исполнителей входит в музыкальный альбом»
Методы для класса-контейнера –
Возврат объекта – альбом, состоящий из песен одного исполнителя
Возврат списка – альбомов, состоящих из песен одного исполнителя
Добавление альбома
Удаление альбома с заданными параметрами
Получение объекта из списка по порядковому номеру
Задание:
Использовать перегрузку функций. Не выполнять интерфейсные действия (например, вывод на экран) во внутренних функциях классов, добавить класс – контейнер для объектов, представляющий собой односвязный список. Класс-контейнер должен содержать только защищенные данные. Класс-контейнер должен включать методы, указанные в варианте. Для класса-контейнера определить конструктор. Не использовать интерфейсные действия внутри классов. Добавить функцию, не являющуюся методом, какого либо класса, выдающую информацию о содержимом класса-контейнера.

Примечание: динамически списки реализовать через собственное описание, а не через библиотечные шаблоны.

Ну и собственно мои наработки
Track.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#pragma once
 
class Track
{
    char *name;
    char *author_name;
public:
    Track(void);
    Track(char *name, char *author_name);
    char *get_author_name();
    char *get_name();
    ~Track(void);
};
Track.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
#include "Track.h"
#include <string>
 
Track::Track(void)
{
}
Track::Track(char *name, char *author_name)
{
    this->name=new char [100];
    this->author_name=new char [100];
    strcpy(this->name, name);
    strcpy(this->author_name, author_name);
}
Track::~Track(void)
{
}
char *Track::get_author_name()
{
    return author_name;
}
char *Track::get_name()
{
    return name;
}
Album.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#pragma once
#include "Track.h"
 
class Album
{
    int n;
    Track *collection;
public:
    Album(void);
    Album(int n);
    int different_name();
    void push_track(int i, Track track);
    ~Album(void);
};
Album.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
#include "Album.h"
#include<string.h>
 
Album::Album(void)
{
}
Album::Album(int n)
{
    this->n=n;
    collection=new Track [n];
}
 
Album::~Album(void)
{
}
int Album::different_name()
{
    int count=0;
    char * *a;
    a=new char * [n];
    int i;
    for(i=0; i<n; i++)
        a[i]=new char [100];
    
    bool flag;
    for(i=0; i<n; i++)
    {
        char *author_name=collection[i].get_author_name();
        flag=true;
        for(int j=0; j<n; j++)
        {
            if(!strcmp(a[j], author_name) )
                flag=false;
            break;
        }
        if(flag==true)
        {
            count++;
            strcpy(a[count-1], author_name);
 
        }
    }
    return count;
}
void Album::push_track(int i, Track track)
{
    collection[i]=track;
}
Container.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 "Track.h"
#include "Album.h"
 
struct obj
 {
  int index;
  team info;
  obj *rlink, *llink;
 };
class Container
{
    obj *left, *right,*q,*k;
    bool f;
public:
    Container(void);
    obj* out_list();
    void add_obj(team t);
    obj* out_list_too();
    void delete_object(int i);
    ~Container(void);
};
Container.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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#include "Container.h"
 
Container::Container(void)
{
}
 
Container::~Container(void)
{
}
 
container::container()
{
 f=false;
 k=new obj;
 k->rlink=NULL;
 k->llink=NULL;
 right=k;
 q=k;
 k->index=1;
}
container::~container()
{
 delete left,right,k,q;
 cout<<"\nДеструктор завершил удаление списков!\n";
 system("pause");
}
void container::add_obj(Album t)
{
 if(!f)
 { 
  f=true;
  k->info=t;
 }
 else
 {
  k=new obj;
  k->info=t;
  k->index=(q->index)+1;//k->llink->index+1;
 
  k->rlink=q;
  q->llink=k;
  q=k;
  q->llink=NULL;
  left=q;
 }
}
obj* container::out_list()
{
 return right;
}
obj* container::out_list_too()
{
 bool fl=true;
 obj *r,*rt,*lt,*qt;
 k=right;
 
 r=new obj;
 r->rlink=NULL;
 r->llink=NULL;
 rt=r;
 qt=r;
 
 while(k)
 {
  if(k->info.too())
   if(fl)
   {
    fl=false;
    r->info=k->info;
    r->index=k->index;
   }
 
   else
   {
    r=new obj;
    r->info=k->info;
    r->index=k->index;
    r->rlink=qt;
    qt->llink=r;
    qt=r;
   }
  k=k->llink;
 }
 
 qt->llink=NULL;
 lt=q;
 return rt;
}
int container::out_kol_track_by_index(int i)
{
 k=right;
 while(k)
 {
  if(i==k->index) return k->info.kol();
  k=k->llink;
 }
 return 0;
 
}
void container::delete_object(int i)
{
 k=left;
 obj *l;
 
 while(k!=NULL)
  if(k->info.delete_..(i))
  if(k==left) 
  {
   q=k;
   left=k->rlink;
   left->llink=NULL;
   l=k=left;
   delete q;
  }
  else
   if(k==right)
   {
    q=k;
    right=k->llink;
    right->rlink=NULL;
    k=NULL;
    delete q;
   }
   else
   {
   q=k;
   l->rlink=k->rlink;
   k->rlink->llink=l;
   delete q;
   k=l->rlink;
   }
 else
 {
  l=k;
  k=k->rlink;
 }
}
Главная функция main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 #include "Track.h"
#include "Album.h"
#include "Container.h"
#include <iostream>
using namespace std;
int main()
{
    Album main_album(3);
    Track one("Some name", "Some author"),
        two("Yet another name", "Some author"),
        three("Yet yet another name", "Yet another author");
    main_album.push_track(0, one);
    main_album.push_track(1, two);
    main_album.push_track(2, three);
    cout<<main_album.different_name();
 
 
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.09.2011, 11:59     Object-oriented programming Help
Посмотрите здесь:

C++ Где купить или скачать книгу Scott Meyers, Effective C++ Programming
C++ что такое Data-driven programming ?
C++ Object аналог в С++
C++ Изучение Stroustrup "The C++ Programming Language" (4th Edition)
C++ Вывод в системе programming-challenges - сравнить две реализации
C++ Отсутствует Object.h
C++ Существует ли перевод книги Страуструпа C++ programming language, 4th edition?
C++ What are a few of the functional-style programming methods that are available in C++11?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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