Рубрики

Инициализация членов данных

В C ++ переменные класса инициализируются в том же порядке, в котором они указаны в объявлении класса.

Рассмотрим приведенный ниже код.

#include<iostream>

  

using namespace std;

  

class Test {

  private:    

    int y;

    int x;    

  public:

    Test() : x(10), y(x + 10) {}

    void print();

};

  

void Test::print()

   cout<<"x = "<<x<<" y = "<<y; 

}

  

int main()

{

    Test t;

    t.print();

    getchar();

    return 0;    

}

Программа выводит правильное значение x, но некоторое мусорное значение для y, потому что y инициализируется перед x, как это было раньше в объявлении класса.

Таким образом, можно использовать одну из следующих двух версий, чтобы избежать проблемы в приведенном выше коде.

// Сначала: изменить порядок объявления.

class Test {

  private:    

    int x;    

    int y;

  public:

    Test() : x(10), y(x + 10) {}

    void print();

};

// Второе: изменить порядок инициализации.

class Test {

  private:    

    int y;

    int x;    

  public:

    Test() : x(y-10), y(20) {}

    void print();

};

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Инициализация членов данных

0.00 (0%) 0 votes