Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Конструктор копирования


Автор: Djaconda 11.6.2008, 16:40
есть код
Код

#include <stdio.h>
#include <conio.h>

class A
{
  int b;
  public:
    A (int a) : b(a) {}
    A(A &a)
    {
      printf("A is coled");
    }
    void Show()
    {
      printf("\nb=%d",b);
    }
};

int main()
{
  clrscr();
  A a(10);
  A a1(a);
  a1.Show();
  getch();
  return 0;
}
:

в идеале резултат b должен равняться 10 а получаеться 12803.

а при вынесении обьявления объектов перед функцией main тоесть сделав их глобальными b=0; почему так обьясните плиз.

Автор: Fazil6 11.6.2008, 16:58
Цитата(Djaconda @  11.6.2008,  16:40 Найти цитируемый пост)
а при вынесении обьявления объектов перед функцией main тоесть сделав их глобальными b=0; почему так обьясните плиз.

в идеале он не должен быть 10. Твой "клнструктор копии" не инициализирует b и поэтому b = "что попало"

Автор: Alek86 11.6.2008, 17:01
Цитата(Djaconda @  11.6.2008,  16:40 Найти цитируемый пост)
в идеале резултат b должен равняться 10 а получаеться 12803.

ты переопределил конструкор копирования
если ты его переопределяешь, то компилятор уже не генерирует свой
а поскольку ты сам не копируешь значение b, то в новом экземпляре там получится мусор

Автор: Djaconda 11.6.2008, 17:53
спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)