Почему я не могу объявить и определить переменную-член в разных строках класса? - PullRequest
0 голосов
/ 02 ноября 2018

Как видите, в классе "Demo" я объявил "id". Но я не могу инициализировать это в следующей строке (я знаю, я мог бы сделать это в той же строке, но все же). Я могу сделать то же самое в случае «а» в основной функции. Почему ???

#include <iostream>
using namespace std;

class Demo {
    public:
    int id;
    id = 90;
    int setID(int x)
    {
        id = x;
    }
};

int main() {
    int a;
    a = 90;
    Demo d;
    d.setID(50);
    cout<<a<<endl;

    return 0;
}

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Потому что так работает язык. main - это функция. Внутри функции команды выполняются одна за другой:

1) Создать переменную a типа int. 2) Присвойте значение от 90 до a 3) Создать объект d типа Demo и так далее.

Но class Demo { public: int id; int setID(int x) { id = x; } };

не является функцией. Это объявление класса. Это не что иное, как описание сущности. Вы не можете выполнять команды внутри описания. Вы можете сказать "этот класс имеет int a" и все

0 голосов
/ 02 ноября 2018

Тело функции - это последовательность операторов. Тело класса - это последовательность объявлений членов. Большинство операторов не могут входить в тело класса, потому что они не являются допустимыми объявлениями членов. Вы можете поместить «исполняемый код» внутри класса, только если он вложен в функцию.

Если есть фрагмент кода, который вы хотите запускать каждый раз, когда создается экземпляр класса, поместите его в конструктор. Если есть фрагмент кода, который вы хотите запустить только один раз, когда класс определен, в C ++ нет механизма для этого.

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