Наследование: значение наследуемых изменений - PullRequest
0 голосов
/ 28 июня 2018

Я пытаюсь написать игру со змеями на языке c ++, и мне необходимо использовать наследование (если честно, я не уверен, что мое понимание наследования даже правильно). У меня есть два класса:

class gameInfo
class playSnake 

внутри gameInfo, это функция, вызываемая main для установки значения длины и ширины (псевдокод):

class gameInfo{
    int playFieldWidth;
    int playFieldHeight;
    void getPlayFieldDimensions(){
        cout << "How big do you want to play field to be?\n";
        cout << "Width: ";
        cin >> playFieldWidth;
        cout << "Height: "; 
        cin >> playFieldHeight
    }
}

class play: public gameInfo {
    void setPlayField() {
        cout << playFieldWidth; // if I enter 10, returns -858993460. 
        //loop will print nothing.
        for (int row = 0; row < playFieldHeight; row++) {
            for (int col = 0; col < playFieldWidth; col++) {
                if (row = 0 || row == playFieldWidth - 1) {
                    cout << "*";
                } else  if (col == 0 || col == playFieldWidth - 1) {
                    cout << "*";
                } else {
                    cout << " ";
                }
            } cout << endl;
        }
    }

main () {
    playSnake play;
    gameInfo info;

    info.getPlayFieldDimensions();
    cout << info.playFieldWidth; // if I enter 10, returns as 10.
    play.setPlayField();

    system("PAUSE");
}

Проблема в том, что внутри setPlayField () ширина и высота имеют сохраненное значение некоторого сверхдлинного отрицательного числа, а не того, которое было присвоено.

Любая помощь будет великолепна. Я попытался найти это, но не нашел ничего похожего или полезного (IMO). Спасибо!

1 Ответ

0 голосов
/ 28 июня 2018

Точка наследования состоит в том, чтобы определить класс, который имеет несколько членов (данные, методы ...), а затем определить второй класс, который наследует от первого и добавляет некоторые собственные элементы. В вашем случае вы определяете gameInfo, он хранит два значения и имеет метод, который позволяет вам вводить эти значения. Затем вы определяете класс play, который наследуется от gameInfo. Экземпляр класса play теперь будет иметь 2 целых числа (оба унаследованных) и 2 метода (1 наследуется и 1 относится к play). Так что теперь вам не нужно создавать экземпляр gameInfo, вы можете просто использовать play (вы, конечно, можете создать экземпляр gameInfo, если хотите, но в этом нет необходимости):

#include <iostream>
#include <cstdlib>

using namespace std; //Avoid this if possible (in general). 

class gameInfo{
    public:
    int playFieldWidth;
    int playFieldHeight;
    void getPlayFieldDimensions(){
        cout << "How big do you want to play field to be?\n";
        cout << "Width: ";
        cin >> playFieldWidth;
        cout << "Height: "; 
        cin >> playFieldHeight;
    }
};

class play: public gameInfo {
    public:
    void setPlayField() {
        cout << playFieldWidth;
        for (int row = 0; row < playFieldHeight; row++) {
            for (int col = 0; col < playFieldWidth; col++) {
                if (row == 0 || row == playFieldWidth - 1) {
                    cout << "*";
                } else  if (col == 0 || col == playFieldWidth - 1) {
                    cout << "*";
                } else {
                    cout << " ";
                }
            } cout << endl;
        }
    }
};

int main () {
    play playSnake;
    playSnake.getPlayFieldDimensions();
    cout << playSnake.playFieldWidth;
    playSnake.setPlayField();
    system("PAUSE");
}

Нечто подобное должно работать (обратите внимание, что я правильно переименовал вещи в main(), в вашем примере была опечатка. Я также обнародовал все на некоторое время, чтобы избежать дальнейшего усложнения вещей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...