C ++ Проблема объявления нескольких экземпляров объекта в одной строке - PullRequest
1 голос
/ 06 марта 2011

При выполнении домашнего задания мне трудно понять поведение, когда основной класс создает два объекта одного класса в одной строке следующим образом. Обратите внимание, что объект присваивания для класса ведет себя как int:

main () {
  MyClass x,y = 5;
  cout << "x = " << x << endl; // outputs x = 0...why not 5???
  cout << "y = " << y << endl; // outputs y = 5
}

и вот определение класса заголовочного файла:

class MyClass {
   public:
      MyClass(int initValue = 0); //constructor
      operator int() {return myValue}; //conversion operator to int
   private:
      int myValue;
}

и, наконец, мой исходный файл:

#include "MyClass.h"

MyClass::MyClass(int initValue) {
   myValue = initValue;
}

Почему x не инициализируется со значением 5, как y?

1 Ответ

7 голосов
/ 06 марта 2011

Проблема в том, что C ++ анализирует

MyClass x,y = 5;

Как будто вы написали

MyClass x;
MyClass y = 5;

И поэтому x инициализируется по умолчанию, а не инициализируется с 5. Чтобы исправить это, измените строку на

MyClass x = 5, y = 5;
...