Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.12.2012, 20:37   #1
McToNy
Пользователь
 
Регистрация: 29.05.2012
Сообщений: 14
По умолчанию Заменить конструкторы на конструктор по умолчанию

Подскажите,пожалуйста, как изменить код программы, чтобы вместо конструктуров был конструктор по умолчанию,а программа работала по прежнему(изменить нужно только в class.h)

Код программы:
class.h
Код:
class Rectangl5
{
private:
   float height;
   float width;
   static int count;
public:
   Rectangl5(float Height, float Width);
   Rectangl5(float Side);
   Rectangl5(Rectangl5& R);
  ~Rectangl5();
   float   Area();
   static int Count() { return(count); }
};

int Rectangl5::count = 0;
class.cpp
Код:
float Rectangl5::Area()
{
   return(height*width);
}


Rectangl5::Rectangl5(float Height, float Width)
{
   height = Height;
   width  = Width;
   char buf[128];
   sprintf(buf, "Создан прямоугольник %g x %g", height, width);
   ShowMessage(buf);
   count++;
}


Rectangl5::Rectangl5(float Side)
{
   height = Side;
   width  = Side;
   char buf[128];
   sprintf(buf, "Создан прямоугольник %g x %g", height, width);
   ShowMessage(buf);
   count++;
}


Rectangl5::Rectangl5(Rectangl5& R)
{
   height = R.height;
   width  = R.width;
   char buf[128];
   sprintf(buf, "Создан прямоугольник %g x %g", height, width);
   ShowMessage(buf);
   count++;
}

Rectangl5::~Rectangl5()
{
   char buf[128];
   sprintf(buf, "Удален прямоугольник %g x %g", height, width);
   ShowMessage(buf);
   count--;
}

Последний раз редактировалось Stilet; 10.12.2012 в 21:02.
McToNy вне форума Ответить с цитированием
Старый 10.12.2012, 20:52   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Любая программа, использующая этот класс? Никак.
Код:
Rectangl5 a(3, 2);
Без определённого конструктора с двумя аргументами эта строка ошибочна.
Abstraction вне форума Ответить с цитированием
Старый 10.12.2012, 20:57   #3
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Код:
Rectangl5(float Side=0);

Последний раз редактировалось _Bers; 10.12.2012 в 20:59.
_Bers вне форума Ответить с цитированием
Старый 10.12.2012, 21:00   #4
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Abstraction Посмотреть сообщение
Любая программа, использующая этот класс? Никак.
Код:
Rectangl5 a(3, 2);
Без определённого конструктора с двумя аргументами эта строка ошибочна.
А теперь правильный ответ:

На языке с++ конструктором по умолчанию является либо дефолтный конструктор, генерируемый компилятором, либо явно определенный конструктор, способный принимать все свои аргументы по умолчанию.
_Bers вне форума Ответить с цитированием
Старый 10.12.2012, 21:05   #5
McToNy
Пользователь
 
Регистрация: 29.05.2012
Сообщений: 14
По умолчанию

Abstraction,моя программа, а где ты нашел эту строку?в упор не вижу её в коде.
_Bers благодарю,похоже на правду,думаю именно так и должно быть)
McToNy вне форума Ответить с цитированием
Старый 10.12.2012, 21:11   #6
McToNy
Пользователь
 
Регистрация: 29.05.2012
Сообщений: 14
По умолчанию

_Bers,подскажите, а почему только в одной строке Rectangl5(float Side=0);, а не
Rectangl5(float Height=0, float Width=0);?
хочу разобраться,а не выходит что-то
McToNy вне форума Ответить с цитированием
Старый 10.12.2012, 21:17   #7
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от McToNy Посмотреть сообщение
_Bers,подскажите, а почему только в одной строке Rectangl5(float Side=0);, а не
Rectangl5(float Height=0, float Width=0);?
хочу разобраться,а не выходит что-то
Конструктор по умолчанию можно вызвать без аргументов:
Rectangl5();

Если оба конструктора будут по умолчанию, как компилятор догадается, какой именно ты имеешь ввиду?

Конструктор по умолчанию может быть только один.
_Bers вне форума Ответить с цитированием
Старый 10.12.2012, 21:23   #8
McToNy
Пользователь
 
Регистрация: 29.05.2012
Сообщений: 14
По умолчанию

ясно) а можно к примеру так? :
Цитата:
Rectangl5()
{float Height=0; float Width=0;}

Последний раз редактировалось McToNy; 10.12.2012 в 21:25.
McToNy вне форума Ответить с цитированием
Старый 10.12.2012, 21:27   #9
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от McToNy Посмотреть сообщение
ясно) а можно к примеру так? :
Можно.

Можно даже так:

Код:
Rectangl5(): Height(0),Width(0){}
_Bers вне форума Ответить с цитированием
Старый 10.12.2012, 21:28   #10
McToNy
Пользователь
 
Регистрация: 29.05.2012
Сообщений: 14
По умолчанию

_Bers спасибо)
McToNy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Класс конструктор по умолчанию Madmaxisss Visual C++ 6 15.07.2011 20:22
не могу создать конструктор с параметрами по умолчанию wwe2012 Общие вопросы C/C++ 3 30.03.2011 17:20
Конструктор по умолчанию. Jane-sad Помощь студентам 1 23.11.2010 11:52
Конструктор по умолчанию Rembo Общие вопросы C/C++ 9 30.07.2008 09:54