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

Оптимизация кода игры в крестики нолики. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Имя экземпляра объекта внутри класса на С++ http://www.cyberforum.ru/cpp-beginners/thread946447.html
Добрый день. Подскажите, пожалуйста, как узнать имя экземпляра объекта внутри класса на С++ ? В частности, мне надо имя экземпляра объекта печатать на экран.
C++ Разница между С и С++ Если не брать во внимание объекты и классы, то разница состоит только лишь в cin, cout и директивах? http://www.cyberforum.ru/cpp-beginners/thread946442.html
C++ Рекурсивные функции
1. Написать рекурсивную функцию, которая бы вычисляла n-тое число Фибоначчи. 2. Написать рекурсивную функцию которая печатает элементы массива в обратном порядке.
C++ Принципы отладки в MVS 2012
Привет киберфорумцы! Подскажите пожалуйста, как в режиме отладки путешествовать только по написанному мной коду не, заходя в файлы предоставляемые MVS? А то начинаешь искать ошибку, выставив точку останова, для того, чтобы отследить поведение некоторых переменных внутри функции, тыкаешь Ф11 (чтобы перепрыгнуть из мейн в функцию), а забрасывает в какой-нибудь бесконечный ostream или...
C++ Присвоение значения указателю http://www.cyberforum.ru/cpp-beginners/thread946401.html
Как можно, вот так, присваивать указателю значение? Разве, указатель не должен всегда содержать адрес? const char* szString = "Randy";
C++ function overloading День добрый. Что такое function overloading я понимаю, но вот не очень въезжаю, что требуется от меня в задании (учусь в универе прикладных наук по спец. IT) Вот задание: Write functions initialize_xy, that initializes two double variables that are passed as parameters. If we call the function in the form initialize_xy(&x, &y, 1.0, 2.0) it gives x a value 1.0 and y a value 2.0. If, on the... подробнее

Показать сообщение отдельно
x1Mike7x
 Аватар для x1Mike7x
214 / 127 / 6
Регистрация: 06.11.2010
Сообщений: 234
01.09.2013, 20:12     Оптимизация кода игры в крестики нолики.
1) Форматирование кода не очень - всё как-то сбито в разные блоки, непонятные отступы где не нужно и их отсутствие где нужно. В идеале: каждый блок должен иметь отступ в 4 пробела. И египетские скобочки режут глаз - всё-таки не на Джаве пишешь.
Например, первых два метода в Боард.срр я бы поправил так (по форматированию)
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
Board::Board()
{
    Board::SetCell();
    Board::cell_win = Going;
}
 
Who_Win Board::WhoWinner()
{
    return cell_win;
}

2) Вызовы методов класса из другого метода этого же класса. Например, в конструкторе Боарда ты вызываешь Board::SetCell(); - так пишут тогда, когда нужно вызвать метод внутри метода другого класса (или где-то еще, но не в методе того же класса), при этом не создавая экземпляр класса, т.е. класс выступает в роли обычного неймспейса. Также, метод, который вызывается таким образом должен быть статическим.
К тому же в методе Board::WhoWinner() ты уже не пишешь Board::cell_win =)
Я бы написал так:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
Board::Board()
{
    SetCell();
    cell_win = Going;
}
 
Who_Win Board::WhoWinner()
{
    return cell_win;
}

3) Правила наименования. По кодестайлу принято классы называть с большой буквы, а поля и методы классов - с маленькой. Также, лучше всего полям (константам не надо - они все капсом и так выделены) добавить префикс "m" (member), а после - писать название поля. Также обычно объявляют сначала паблик-секцию, потом протектед, а потом приват.
Еще - не понятны сразу два сеттера для ячейки в классе Боард, причём с разными возвращаемыми типами.
И, кстати, если ты в методе не изменяешь полей класса, то этот метод лучше всего сделать констовым, т.к. когда ты будешь работать с неизменяемым объектом (например, объявишь его как const Board * board), то ты не сможешь дернуть неконстовые методы.
Например, класс Боард я бы описал так:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Board
{
public:
    Board();
    Who_Win isWin(Who_Win prov);
    bool setCell(int set_x, int set_y, XO xo);
    void setCell();
    int getCell(int set_x, int set_y) const;
    Who_Win whoWinner();
 
private:
    int m_array[10][10];   // или mArray, как удобней
    Who_Win m_cell_win;  // или mCellWin
    static const int FIELD_SIZE=5;
};

4) В BoardView::PrintMap() есть свитч-кейс, так вот - всегда закрывай свитч-кейс дефолтом. Даже если уверен, что там только именно эти состояния, которые ты написал. Всегда добавляй дефолт. Потому что в будущем ты можешь расширить варианты значения проверяемого объекта, а свитч изменить забудешь. Или просто завтыкаешь, что иногда там может быть не 0, 1 или 2, а 845. Но это такое.


Это то, что на первый взгляд увидилось. Может что-то покажется тебе полезным и ты даже учтешь это =)
А вообще - молодец, что учишься и делаешь что-то.
Удачи.
 
Текущее время: 08:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru