Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/86: Рейтинг темы: голосов - 86, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 19.02.2012
Сообщений: 11

Конструктор с параметром по умолчанию

29.02.2012, 17:36. Показов 17332. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, знаю, что здесь про конструкторы много говорили, но я не смог решить свою проблему поэтому обращаюсь (хотя мне кажется что проблема пустяковая).
Нам дали задание создать 2 конструктора в объявлении класса:
Первый в параметрах принимает значения полей класса, причем числовые поля задаются по умолчанию.
Второй не принимает значений, а просто запрашивает ввод с клавиатуры.
В демонстрационной программе необходимо динамически создать 3 файла с помошью функции new
Первый - конструктор со всеми параметрами,
Второй - конструктор без числовых параметров (кроме номера объекта)
Третий -конструктор без параметров.

Вот заголовок с объявлениями:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#ifndef Givotnie
#define Givotnie
#include "stdio.h";
class CGivotnie
{  int nomer;
   char kl[5];
   char naimen[15];
   double ves;
 
public:
 CGivotnie(int n1,char *k,char *na,double v);
 CGivotnie();
 ~CGivotnie();
void PrintClass (int n);
void InitClass(int n);
void vvod_naim ();
void vivod_naim ();
void vvod_ves ();
void vivod_ves ();
void vvod_kl ();
void vivod_kl ();
};
#endif
Вот реализация:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include "Givotnie.h";
CGivotnie::CGivotnie(int n1,char *k,char *na,double v = 45.0)
{printf("Создание нового объекта под номером %d\n",n1);
 nomer=n1;
 *naimen=*na;
 *kl=*k;
 ves=v;
}
CGivotnie::CGivotnie()
{printf("Создание нового объекта под номером ");
 scanf("%d",&nomer);
 vvod_naim();
 vvod_ves();
 vvod_kl();
}
 CGivotnie::~CGivotnie()
{printf("Вы удаляете объект со следующими параметрами\n");
 printf("Номер элемента %d\n",nomer);
 printf("Вес элемента %lf\n",ves);
 printf("Наименование элемента %s\n",naimen);
 printf("Класс элемента %s\n",kl);
}
 void CGivotnie :: InitClass (int n)
{nomer = n;
 vvod_ves();
 vvod_naim();
 vvod_kl();
}
void CGivotnie::PrintClass (int n)
{ printf("Номер = %d",nomer);
  vivod_ves();
  vivod_naim();
  vivod_kl();
}
void CGivotnie::vvod_ves ()
{printf("Введите вес \n");
scanf("%lf",&ves); getchar();
}
void CGivotnie::vvod_naim ()
{printf("Введите наименование\n");
 scanf("%6s",&naimen);
}
void CGivotnie::vvod_kl ()
{printf("Ввдите класс 5 букв (mleko, nasek itd)\n");
 scanf("%5s",&kl);}
void CGivotnie::vivod_ves()
{printf("Вес элемента = %3.2lf",ves);}
void CGivotnie :: vivod_naim()
{printf("Наименование элемента = %s",naimen);}
void CGivotnie :: vivod_kl ()
{printf("Класс элемента = %5s\n",kl);}
Вот демонстрационная программа:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include "Givotnie.h"
#include "stdio.h"
void main()
{ int n,i,k;
  char a;
 
CGivotnie *Anim= new CGivotnie(1,"mleko","volk",55);
CGivotnie *Anim2= new CGivotnie(1,"mleko","bear");
CGivotnie *Anim3= new CGivotnie();
 
delete Anim;
delete Anim2;
delete Anim3;
printf("Работа программы окончена");
}
При отладке компилятор ругается на 8 строку демонстрационной программы
error C2661: CGivotnie::CGivotnie: нет перегруженной функции, принимающей 3 аргументов
Может я не так понял использование параметров по умолчанию?

Заранее спасибо
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.02.2012, 17:36
Ответы с готовыми решениями:

Будет ли определен компилятором конструктор по умолчанию, если есть конструктор с дефолтным параметром?
Добрый день, сразу к делу, есть некий класс class some { int x; public: some(int y = 1) : x(y) {} };

Задача на классы, конструктор с параметром и по умолчанию
Скомпилировал, запустил. Добавляю новые элементы... и все. Программа прекращает свою работу, окно закрывается. Этапы вывода новых...

Создать класс. Написать конструктор по умолчанию, конструктор с параметрами. Перегрузить операции «меньше» и «равно»
Помогите пожалуйста, хоть с одним из заданий. 1. Создать класс. Написать конструктор по умолчанию, конструктор с параметрами....

3
 Аватар для Serejke_qq
199 / 142 / 57
Регистрация: 06.07.2011
Сообщений: 300
29.02.2012, 17:41
собственно говоря ошибка говорит сама за себя..
конструктор с параметрами принимает 4 агрумента .. вот :
C++
1
CGivotnie(int n1,char *k,char *na,double v);
а вы передаёте 3 :
C++
1
CGivotnie *Anim2= new CGivotnie(1,"mleko","bear");
как вариант перегрузить конструктор для 3х аргументов в котором ваше v будет автоматически принимать стандартное значение..
1
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.02.2012, 17:52
Givotnie.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class CGivotnie
{  int nomer;
   char kl[5];
   char naimen[15];
   double ves;
 
public:
 CGivotnie(int n1,char *k,char *na,double v=45.0);
 CGivotnie();
 ~CGivotnie();
//...
};
#endif
Givotnie.cpp
C++
1
2
3
4
5
6
7
8
9
#include "Givotnie.h";
CGivotnie::CGivotnie(int n1,char *k,char *na,double v)
{printf("Создание нового объекта под номером %d\n",n1);
 nomer=n1;
 *naimen=*na;
 *kl=*k;
 ves=v;
//...
}
Добавлено через 2 минуты
Программа видит только "Givotnie.h" в котором конструктор с параметром по умолчанию неопределен, а
"Givotnie.ccp" не видит так как вы его не подключали
1
0 / 0 / 0
Регистрация: 19.02.2012
Сообщений: 11
29.02.2012, 18:54  [ТС]
Действительно, что-то я затупил)
Спасибо огромное!

Добавлено через 59 минут
Ещё одна проблема.
При работе, программа, когда записывает в поля значения из первого конструктора, сшивает имя класса и наименование.
А когда наименование вводится с клавиатуры, то его программа просто не выводит (это когда конструктор идет без параметров).
Я переделал в конструкторе с параметрами запись наименования и класса, а то в начальной версии программа выводила лишь первые символы.

вот реализация измененного конструктора:
C++
1
2
3
4
5
6
7
8
9
10
CGivotnie::CGivotnie(int n1, char *(k), char *(na),double v)
{int i;
 printf("\nSozdanie novogo obiekta pod nomerom %d\n",n1);
 nomer=n1;
 for(i=0;i<5;i++)
 *(kl+i)=*(k+i);
 for(i=0;i<15;i++)
 *(naimen+i)=*(na+i);
 ves=v;
}
Вложил скрин работы:
Миниатюры
Конструктор с параметром по умолчанию  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.02.2012, 18:54
Помогаю со студенческими работами здесь

Можно ли использовать конструктор по умолчанию и конструктор инициализации одновременно?
Можно ли использовать конструктор по умолчанию и конструктор инициализации одновременно?

Создать класс "Вектор" и реализовать конструктор по умолчанию, конструктор копирования и деструктор
Всем доброго времени суток! нужна ваша помощь! нужно создать класс вектор и реализовать конструктор по умолчанию, копирования и...

Конструктор с параметром C++
Приветствую! Изучая одну литературу столкнулся с конструктором в котором мне не понятен синтаксис т.к. во время обучения самого С++ не...

конструктор с параметром
не могу понять в чем причина. В конструкторе с параметром вызываю функцию анализа - она работает коряво - присваивает крайние значение из...

Конструктор класса не видит конструктор по умолчанию другого класса
Ошибка, естественно, в Classes.cpp, в строке 20. Ругается, что у класса TailNode нет конструктора по умолчанию, хотя он там, конечно, есть....


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru