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

Класс, оценка - C++

Восстановить пароль Регистрация
 
Oryel
11 / 1 / 0
Регистрация: 02.10.2015
Сообщений: 80
15.06.2016, 14:16     Класс, оценка #1
Буду краток. Доброго времени суток.
Я начал изучать ООП. Вот по заданию (книги) написал класс библиотека (не закончил еще, есть места, которые нужно исправить)
Я прошу оценить стиль написания, ошибки возможные, небрежности. Мне это нужно для того, чтобы сразу исправить пока эти привычки и ошибки не обернулись привычкой .

ЗЫ. это не лабораторная, не курсовая и т.п. Готовый код тоже не нужен. Нужны дельные советы и комментарии.
ЗЫЗЫ. Написана лишь часть функционала (вот дописываю), есть различные пометки для меня и для отладки.


Задание было такое, примерно: реализовать класс библиотека с возможностями добавлять, удалять, сортировать книги и т.п.

Заголовочный файл

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
/**
 *  @brief      класс библиотека, включающий структуру книга
 *  @details        класс библиотека, в классе реализованы методы для поиска,
 *              удаления, сортировки, добавления и т.п. книг. Данные 
 *              организованы с помощью линейного списка двусвязного. 
 *              Элементом списка является структура данных mybook с полями 
 *              данных и указателями на соседние эллементы. В структуре     
 *              реализован конструктор и деструктор.
 *  @date       14.06.2016
 *  @version        1.0.0
 *  @note       Реализация поиска
 *  @note       отладочные пункты public
 */
  
#define DEBUG_PUB
 
#include <iostream>
using namespace std;
class mybible {
    
    #ifdef DEBUG_PUB
        public:
    #else
        private:
    #endif
        struct mybook{
            unsigned char year;
            unsigned char ID;
            char*  title;
            char* author;
            char* publication;
            mybook* p_prev;
            mybook* p_next;
            /// @brief  конструктор по умолчанию
            mybook(): year(0), ID(0), title(0), author(0), publication(0), p_prev(0), p_next(0) { 
                cout << "Constroctor for book is work" <<  endl; system ("pause");
            }
            
            /// @brief      деструктор
            ~mybook(){
                cout << "Destructor for book is work" << endl; system ("pause");
                delete [] title; 
                delete [] author; delete [] publication;                
            }
        };
        mybook* p_head;
        mybook* p_tail;
        static unsigned int number_books;
        
        mybook* SearchByNum( const unsigned int num ) const;
 
 
    public:
            /// @brief  конструктор по умолчанию    
        mybible() : p_head( 0 ), p_tail( 0 ) { cout << "Costructor for bible is work" << endl; system ("pause");} 
        /// @brief  деструктор
        ~mybible();
                                                                    
        //------------------------------ Methods for the count
        static bool MinusCount( void ) { if( number_books ) { number_books--; return 0; } return 1;  }
        static void PlusCount( void ) { number_books++;}
        static unsigned int GetCount( void )  { return number_books; }
        
        bool SetBookTitle( const char * title , const unsigned int num = number_books );
        bool SetBookAuthor( const char * author , const unsigned int num = number_books );
        bool SetBookPublication( const char * publication , const unsigned int num = number_books  );
        bool SetBookDate( const unsigned char year, const unsigned int num = number_books);
        bool SetBookID( const unsigned char Id, unsigned int num = number_books );
        
 
        const char* GetBookTitle( const unsigned int num = number_books ) const;    
        const char* GetBookAuthor( const unsigned int num = number_books ) const;   
        unsigned char GetBookDate( const unsigned int num = number_books ) const;
        bool AppEndBook();
        bool DeleteBook( unsigned char );
        bool DeleteBook( char * );
        //bool Sort по какому ключу, удаление, переещение, копирование (предусм констр копирования)
};


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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
#include "bible.h"
 
unsigned int mybible::number_books = 0;
 
 
bool mybible:: AppEndBook() {
    
    PlusCount();            // counter
    if ( ( p_head == 0 ) && ( p_tail == 0 )) {
        // значит это первый элемент верно ли адрес беру?
        mybook *temp = new mybook;
        temp-> p_prev = 0;
        temp-> p_next = 0;
        p_head = temp;
        p_tail = temp;
    } 
    else {
        mybook *temp = new mybook;
        temp-> p_prev = p_head;
        temp-> p_next = 0;
        p_head -> p_next = temp;
        p_head = temp;
    }
 
    return false;   
}
 
mybible::~mybible() {
    cout << "Destructor for bible is work" << endl; 
    if ( p_tail != 0){
        mybook *p, *p2 = p_tail;
        do {
            p = p2->p_next;
            delete p2;
            p2 = p;
        } while (p2 !=0);
    }   
    system ("pause");
}       
 
 
 
bool mybible::SetBookTitle( const char * title , const unsigned int num ){
 
    if ( title == 0 ){
        return true;
    }
    mybook* p_tmp = SearchByNum( num );
    if ( !p_tmp ) { return 0; }
 
    p_tmp->title = new char [ strlen( title ) + 1 ];
    strcpy(p_tmp->title, title);
    return false;
}
 
 
bool mybible::SetBookAuthor( const char * author , const unsigned int num ){
 
if ( author == 0 ){
        return true;
    }
    mybook* p_tmp = SearchByNum( num );
    if ( !p_tmp ) { return 0; }
 
    p_tmp->author = new char [ strlen( author ) + 1 ];
    strcpy(p_tmp->author, author);
    return false;
}
 
bool mybible::SetBookPublication( const char * publication , const unsigned int num ){
    if ( publication == 0 ){
        return true;
    }
    mybook* p_tmp = SearchByNum( num );
    if ( !p_tmp ) { return 0; }
 
    p_tmp->publication = new char [ strlen( publication ) + 1 ];
    strcpy(p_tmp->publication, publication);
    return false;
}
 
bool mybible::SetBookDate( const unsigned char year, const unsigned int num ){
 
    mybook* p_tmp = SearchByNum( num );
    if ( !p_tmp ) { return 0; }
 
    p_tmp->year = year;
    return false;
}
 
bool mybible::SetBookID( const unsigned char ID, const unsigned int num  ){
    
    mybook* p_tmp = SearchByNum( num );
    if ( !p_tmp ) { return 0; }
 
    p_tmp->ID = ID;
    return false;
    
}
 
mybible::mybook* mybible::SearchByNum( const unsigned int num ) const{
    unsigned int max = GetCount();
    if ( num > max)         { return 0; }
    else if ( num == max )  { return p_head; }
    else if ( num == 1 )    { return p_tail; }
    
    else if ( num <= (max/2) ) {
        mybook *p_tmp = p_tail->p_next;
        unsigned int i = 2;
        while( p_tmp ){
            if ( num == i )
                return p_tmp;
            i++;
            p_tmp = p_tmp->p_next;
        }
    }
    
    else if ( num > (max/2) ) {
        mybook *p_tmp = p_head->p_prev;
        unsigned int i = max - 1;
        while( p_tmp ){
            if ( num == i )
                return p_tmp;
            i--;
            p_tmp = p_tmp->p_prev;
        }
        
        return 0;
    }
}
 
 
 
 
 
const char* mybible::GetBookTitle( const unsigned int num ) const {
 
    mybook* p_tmp = SearchByNum( num );
    if ( !p_tmp ) { return 0; }
    return p_tmp->title;
    
}
 
const char* mybible::GetBookAuthor( const unsigned int num ) const {
    mybook* p_tmp = SearchByNum( num );
    if ( !p_tmp ) { return 0; }
    return p_tmp->author;
}
 
unsigned char mybible::GetBookDate( const unsigned int num  ) const{
    mybook* p_tmp = SearchByNum( num );
    if ( !p_tmp ) { return 0; }
    return p_tmp->year;
 
}

до этого написал пару классов (но они простые ): комплексные числа и еще один.
В общем главное дельные советы, а не типичные клеще "выпей йаду, брось с++, гугл первая ссылка"

Добавлено через 19 минут
вопрос, к примеру, вот я не заполнил поле автор. При cout выдает ошибку. Хотя я думал он должен вывести 0...значение нулевого указателя. Он же выдает ошибку (видимо пытается найти конец массива, которого нет)

Как избежать оного?

C++
1
2
3
4
a.AppEndBook();
a.SetBookTitle("Privet d");
cout<<a.GetBookTitle() << "  " <<  a.GetBookAuthor()  <<endl;
// Ошибка...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.06.2016, 14:16     Класс, оценка
Посмотрите здесь:

C++ Оценка алгоритма
Нужна оценка C++
C++ Оценка хеш-функции
C++ оценка быстродействия
Программы - оценка труда C++
Оценка стиля кода C++
C++ Оценка сложности алгоритма
C++ Класс: как обратиться к методу производного класса через итератор на базовый класс?

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

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

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