Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
 Аватар для Red Planet
49 / 10 / 3
Регистрация: 20.09.2009
Сообщений: 263

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

01.08.2010, 13:03. Показов 680. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, вот простейший класс.
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 стали нулями.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.08.2010, 13:03
Ответы с готовыми решениями:

Коллекция объектов одного класса в экземпляре другого класса
Извиняюсь, если написал не совсем адекватный заголовок. В общем, у меня есть такая модель: public class AssetsFlowsViewModel { ...

Параметр в экземпляре класса
Добрый день всем. имеется обрывок класса template &lt;class TKey, class TStoredData&gt; class FixedCache { public: enum...

Почему обнуляется лист в экземпляре класса? О.о
Добрый день! Понимаю что вопрос простой, но хоть убей в голове не укладывается, почему при обнулении листа в main, у нас обнуляется поле в...

8
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
01.08.2010, 13:19
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();
}
0
 Аватар для Red Planet
49 / 10 / 3
Регистрация: 20.09.2009
Сообщений: 263
01.08.2010, 18:18  [ТС]
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 соответственно.
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
01.08.2010, 18:22
Конструктор по умолчанию все-равно генерируется (в данном случае, скорее всего, пустой), так что лучше определить собственный конструктор, а не оставлять инициализацию переменных-членов на совесть компилятора
1
 Аватар для Red Planet
49 / 10 / 3
Регистрация: 20.09.2009
Сообщений: 263
01.08.2010, 18:31  [ТС]
Nameless One, спасибо, понял. Из соображений оптимизации кода создавал тему: не хотелось писать конструктор, который не нужен. Однако оказалось, что писать надо его.
0
01.08.2010, 18:43

Не по теме:

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

1
 Аватар для Red Planet
49 / 10 / 3
Регистрация: 20.09.2009
Сообщений: 263
01.08.2010, 19:29  [ТС]
Не знаю, куда писать об этом, но мне кажется, что мой вопрос можно включить в список часто задаваемых. Новичкам, желающим научиться, будет на один неразрешенный вопрос меньше.
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
01.08.2010, 22:02
Конструктор по умолчанию ведет себя как пустой. А, согласно стандарту, члены-данные класса встроенных типов, если они явно не инициализированы в конструкторе, остаются неинициализированными.
0
Шаровик затейник
 Аватар для Crudelis
696 / 445 / 78
Регистрация: 06.05.2010
Сообщений: 1,109
02.08.2010, 01:08
Red Planet, из вашего первого кода вообще не понятно откуда берутся значения у i и j, в коде программы нигде не вызывается set. Какие там могут быть вообще значения при выводе на консоль... не понятно, возможно -8234234 что то в этом роде.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.08.2010, 01:08
Помогаю со студенческими работами здесь

Перегрузка операторов при динамическом экземпляре класса
Добрый день. Имею: class Single { int a; int b; ~Single(){}; public: .... static void destroyedObj(Single* d) //...

Элементы массива А в одном экземпляре, присутствующие в одном экземпляре в массиве В
помогите плз, выводит элементы масива А даже если их 2 экземляра, а нужно только в одном Задание: Элементы массива А в одном...

Сам вопрос: почему функция-член одного класса не вызывается из функции-члена другого класса?
//Щас всё объясню. Так, имеем два класса, в одном я определил функцию-член. Все конструкторы и прочее //опущены для уменьшения кода ...

Не пишет на русском в создаваемом файле
Ребятки, всем привет, почему-то в конечном файле не пишется текст на русском, я понял в чём проблема, видимо в кодировках, но как решить её...

Кавычки В Программно Создаваемом Файле
Всем добрый день! у меня скрипт (LS) формирует строку и записывает ее в файл. При этом почему-то первый и последний символы в файле -...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru