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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Линейные списки: удалить второй элемент http://www.cyberforum.ru/cpp-beginners/thread1763421.html
Написать функцию где удаляется 2 узел! Текстпрограммы: #include <stdio.h> #include <conio.h> #include <iostream.h> enumtWeather {Sunny,Cloudy,Averages}; structtPogodka { tWeather S; float...
C++ Найти в целочисленном массиве самую длинную последовательность чётных по значению элементов Добрый день! а) Найти в целочисленном массиве самую длинную последовательность чётных по значению элементов. б) Расширить задачу для поиска самой длинной цепочки элементов, обладающих произвольным... http://www.cyberforum.ru/cpp-beginners/thread1763415.html
Символьный анализ текста C++
2. Дана строка. Выполните символьный анализ текста. Ниже представлен рекомендуемый вид диалога во время работы программы. Данные, вводимые пользователем, выделены жирным шрифтом. Введите строку ...
Написать функцию для поиска максимального элемента C++
1. Напишите функцию, параметрами которой служат адреса трех переменных типа double. Функция должна возвращать адрес (значение указателя) той из переменных, адресуемых параметрами, которая имеет...
C++ Вычислите суммы с данной точностью http://www.cyberforum.ru/cpp-beginners/thread1763384.html
3. Вычислите суммы с данной точностью е. Используйте указатели на функции как параметры: \sum_{n=1}^{\infty} \frac{\sin n}{n} , и \sum_{n=1}^{\infty} \frac{n}{{e}^{n}}
C++ Подсчитать количество слов, что заканчиваться на заданий символ. Дан рядок, что вводиться с клавиатуры. Подсчитать количество слов, что заканчиваться на заданий символ. строки. подробнее

Показать сообщение отдельно
Oryel
11 / 1 / 0
Регистрация: 02.10.2015
Сообщений: 98

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

15.06.2016, 14:16. Просмотров 118. Ответов 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
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;
// Ошибка...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.