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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 42, средняя оценка - 4.69
Altair5
0 / 0 / 0
Регистрация: 19.02.2012
Сообщений: 11
#1

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

29.02.2012, 17:36. Просмотров 6440. Ответов 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 аргументов
Может я не так понял использование параметров по умолчанию?

Заранее спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.02.2012, 17:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Конструктор с параметром по умолчанию (C++):

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

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

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Serejke_qq
150 / 108 / 9
Регистрация: 06.07.2011
Сообщений: 224
Завершенные тесты: 2
29.02.2012, 17:41 #2
собственно говоря ошибка говорит сама за себя..
конструктор с параметрами принимает 4 агрумента .. вот :
C++
1
CGivotnie(int n1,char *k,char *na,double v);
а вы передаёте 3 :
C++
1
CGivotnie *Anim2= new CGivotnie(1,"mleko","bear");
как вариант перегрузить конструктор для 3х аргументов в котором ваше v будет автоматически принимать стандартное значение..
Avazart
Эксперт С++
7148 / 5325 / 276
Регистрация: 10.12.2010
Сообщений: 23,567
Записей в блоге: 17
29.02.2012, 17:52 #3
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" не видит так как вы его не подключали
Altair5
0 / 0 / 0
Регистрация: 19.02.2012
Сообщений: 11
29.02.2012, 18:54  [ТС] #4
Действительно, что-то я затупил)
Спасибо огромное!

Добавлено через 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;
}
Вложил скрин работы:
Миниатюры
Конструктор с параметром по умолчанию  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.02.2012, 18:54
Привет! Вот еще темы с ответами:

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

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

Конструктор класса с параметром - C++
Люди, помогите пожалуйста, а то скоро я кого-нибудь убью по-моему... Самое начало программы. Описываю первый класс. Подключил написанный...

Конструктор по умолчанию - C++
как использовать конструктор по умолчанию в конструкторе с параметром? К по умолчанию заполняет массив заранее определёнными символами, а...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
29.02.2012, 18:54
Ответ Создать тему
Опции темы

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