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

Подходит ли книга "Освой самостоятельно c++ за 21 день" для новичков? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Как включить отображение номеров строк в MSVS? http://www.cyberforum.ru/cpp-beginners/thread161351.html
Привет. Я пользуюсь MS Visual C++ ... если компиллятор сообщает .....pg.cpp(135) например, как искать линию под указанным номером? Каждый раз пальцем с верху отсчитывать?
C++ Закрывается окно консоли Здравствуйте! Я новичок в программирование. И желаю научиться C++ есть книга Джесс Либерти "Освой самостоятельно c++ за 21 день" "Проблема из книги ВЫШЕ" там вначале дается код: #include (iostream.h) int main() { cout << "Hello world!\n"; http://www.cyberforum.ru/cpp-beginners/thread161347.html
Звук, генерация, голос C++
ищу способ как можно: 1) генерировать звук 1.1) генерировать звук конкретной частоты и громкости (через колонки), безшовный(чтобы не возникало шипения при переходе между частотами) 1.2) генерировать сложный звук состоящий из нескольких частот 2) считывать звук (в реалтайме, с микрофона) 2.1) основная частота 2.2) много частот теоретический вопрос: если упростить голос человека до одной...
Посылка файла через sendto(...) C++
Через протокол UDP. Нужно открывать файл для чтения и указатель на него передавать в sendto?
C++ Передача указателя функции класса A в класс B http://www.cyberforum.ru/cpp-beginners/thread161311.html
Добрый день! Стоит задача вызывать функцию другого класса в потоке, ну что то типа этого: typedef void (t1::*PTR_FUN)(int); //указатель на не статическую class t1 { private: void MyFun(int i) {
C++ абстрактный базовый класс люди подскажите.есть абстрактный базовый класс можно ли в нем определить конструктор копирования? написал в компиляторе,получается,что можно,но не понимаю почему? если нельзя создавать объект абстрактного класса,то как проходит такое объявление Abk::Abk(const Abk &) ??? Abk-абстрактный базовый класс подробнее

Показать сообщение отдельно
Oleg_SK
5 / 5 / 2
Регистрация: 15.09.2010
Сообщений: 25
15.09.2010, 10:25     Подходит ли книга "Освой самостоятельно c++ за 21 день" для новичков?
Цитата Сообщение от alexzak Посмотреть сообщение
Ты просто С++ мало знаешь. Взгляни на этот код и найди в нем ошибки:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Array& Array::operator=(const Array &rhs)
{
    if (this == &rhs)
       return *this;
    delete [] pType;
    itsSize = rhs.GetitsSize();
    pType = new int[itsSize];
    for (int i = 0; i < itsSize; i++)
    {
        pType[i] = rhs[i];
    }
    return *this;
}
 
int& Array::operator[](int offSet)
{
    int size = GetitsSize();
    if (offSet >= 0 && offSet < GetitsSize())
        return pType[offSet];
    throw xBoundary();
    return pType[0]; // appease MSC
}
Я и не спорю, что мало знаю C++, т.к. еще в самом начале его изучения (прочел по нему только одну сабжевую книгу). Я также не спорю, что в сабжевой книге могут быть ошибки. Мне просто хотелось бы, чтобы здесь были представлены примеры неправельного освещения чего-либо в сабжевой книге, чтобы я принял это к сведению. Теперь перейду к указанному коду:
1. Ошибки в методе-члене перегружающем оператор присваивания.
1.1. Ошибка в строке pType[i] = rhs[i]; происходит попытка вызова для константного объекта неконстантного метода. Исправляется добавлением в класс еще одного метода перегрузки оператора индексирования:
C++
1
2
3
4
5
6
7
8
int Array::operator[](unsigned int offSet) const
{
    unsigned int size = GetitsSize();
    if (offSet >= 0 && offSet < size)
        return pType[offSet];
    throw xBoundary();
    return pType[0]; // appease MSC
}
2. Ошибки в методе-члене перегружающем оператор индексирования.
2.1. IMHO, для индекса лучше использовать не тип int, а тип unsigned int или, если допустимо, unsigned short.
2.2. Недочет в строке if (offSet >= 0 && offSet < GetitsSize()); зачем снова вызывать GetitsSize(), если размер уже сохранен в переменной size?

P.S: На компиляторе не проверял...

Добавлено через 23 минуты
alexzak, кстати: зачем в методе перегрузки оператора индексирования нужна переменная size, если к ней происходит только одно обращение? В данном случае нет никакой экономии, и по этому лучше выкинуть эту переменную из обоих методов перегрузки операторов индексирования, а в условии вызывать метод GetitsSize().
 
Текущее время: 00:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru