Форум программистов, компьютерный форум CyberForum.ru

Вопрос о создаваемом экземпляре класса - C++

Восстановить пароль Регистрация
 
Red Planet
 Аватар для Red Planet
49 / 10 / 2
Регистрация: 20.09.2009
Сообщений: 263
01.08.2010, 13:03     Вопрос о создаваемом экземпляре класса #1
Здравствуйте, вот простейший класс.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class A {
 int i, j;
 public: //A () {i=0; j=0;}
 void set (int a, int b) {i=a; j=b;}
 void show ();
};
 
void A::show() {
 cout <<i<<' '<<j<<endl;
}
 
int _tmain (int argc, _TCHAR* argv[])
{
 A a1;
 a1.show();
}
Как видите, я не инициализировал переменные i и j, также закомментировал конструктор, вывел их при помощи функции show. Получилось, что они сами инициализировались нулями. Выходит, конструктор, который я закомментировал, бесполезен в принципе?
Что с ним, что без него переменные i и j стали нулями.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.08.2010, 13:03     Вопрос о создаваемом экземпляре класса
Посмотрите здесь:

Построить описание класса (ошибки и вопрос) C++
C++ Вычислить одномерный массив С, который содержит элементы, присутствующие в массивах А и В в одном экземпляре
Теоретический вопрос. ( метод класса) C++
Вопрос про конструктор класса по умолчанию C++
C++ Доступ к закрытым элементам класса - Вопрос
Вопрос по функциям класса C++
C++ Вопрос по методам класса
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nameless One
Эксперт С++
 Аватар для Nameless One
5759 / 3408 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
01.08.2010, 13:19     Вопрос о создаваемом экземпляре класса #2
Red Planet, компилятор сгенерировал для твоего класса конструктор по умолчанию (который инициализировал значения переменных-членов значениями по умолчанию).

Добавлено через 2 минуты
Также компилятор может сгенерировать конструктор копирования. Если ты не хочешь, чтобы он это сделал, помести прототип конструктора в секцию private

Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class A 
{
 int i, j;
 A();//Конструктор по умолчанию теперь не доступен
 public:
 void set (int a, int b) {i=a; j=b;}
 void show ();
};
 
void A::show() {
 cout <<i<<' '<<j<<endl;
}
 
int _tmain (int argc, _TCHAR* argv[])
{
 A a1; //При компиляции этой строки произойдет ошибка
 a1.show();
}
Red Planet
 Аватар для Red Planet
49 / 10 / 2
Регистрация: 20.09.2009
Сообщений: 263
01.08.2010, 18:18  [ТС]     Вопрос о создаваемом экземпляре класса #3
Nameless One, как оказалось, я не совсем прав-то был. Мне кажется, что компилятор назначил мои числа не нулями, а цифрами, которыми ему вздумалось, так как при следующем коде
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class C {
    int x, y;
    public: void show ();
};
 
void C::show() {
    cout <<x<<' '<<y;
}
 
int _tmain(int argc, _TCHAR* argv[]) {
    C c1;
    c1.show();
    system("pause");
    return 0;
}
пишется, что x и y равны 256 и 1 соответственно.
Nameless One
Эксперт С++
 Аватар для Nameless One
5759 / 3408 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
01.08.2010, 18:22     Вопрос о создаваемом экземпляре класса #4
Конструктор по умолчанию все-равно генерируется (в данном случае, скорее всего, пустой), так что лучше определить собственный конструктор, а не оставлять инициализацию переменных-членов на совесть компилятора
Red Planet
 Аватар для Red Planet
49 / 10 / 2
Регистрация: 20.09.2009
Сообщений: 263
01.08.2010, 18:31  [ТС]     Вопрос о создаваемом экземпляре класса #5
Nameless One, спасибо, понял. Из соображений оптимизации кода создавал тему: не хотелось писать конструктор, который не нужен. Однако оказалось, что писать надо его.
fasked
01.08.2010, 18:43
  #6

Не по теме:

Цитата Сообщение от Red Planet Посмотреть сообщение
Однако оказалось, что писать надо его.
лучше один раз написать и держать все под контролем, чем сталкиваться с подобными неприятностями

Red Planet
 Аватар для Red Planet
49 / 10 / 2
Регистрация: 20.09.2009
Сообщений: 263
01.08.2010, 19:29  [ТС]     Вопрос о создаваемом экземпляре класса #7
Не знаю, куда писать об этом, но мне кажется, что мой вопрос можно включить в список часто задаваемых. Новичкам, желающим научиться, будет на один неразрешенный вопрос меньше.
Mr.X
Эксперт С++
 Аватар для Mr.X
3011 / 1667 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
01.08.2010, 22:02     Вопрос о создаваемом экземпляре класса #8
Конструктор по умолчанию ведет себя как пустой. А, согласно стандарту, члены-данные класса встроенных типов, если они явно не инициализированы в конструкторе, остаются неинициализированными.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.08.2010, 01:08     Вопрос о создаваемом экземпляре класса
Еще ссылки по теме:

C++ Статическое поле класса, имеющее тип того же класса
Параметр в экземпляре класса C++
Нужен пример неизменяемого класса и класса от которого нельзя наследоваться C++
Составьте программу, выводящую на экран сообщения об отличниках класса, о средней успеваемости учащихся класса C++
Объявление объекта класса fstream в качестве статической компоненты другого класса C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Crudelis
Шаровик затейник
 Аватар для Crudelis
669 / 411 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
02.08.2010, 01:08     Вопрос о создаваемом экземпляре класса #9
Red Planet, из вашего первого кода вообще не понятно откуда берутся значения у i и j, в коде программы нигде не вызывается set. Какие там могут быть вообще значения при выводе на консоль... не понятно, возможно -8234234 что то в этом роде.
Yandex
Объявления
02.08.2010, 01:08     Вопрос о создаваемом экземпляре класса
Ответ Создать тему
Опции темы

Текущее время: 06:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru