Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Конструктор по умолчанию 
V
    Опции темы
ioManip
Дата 1.10.2013, 03:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 12.8.2011
Где: Благовещенск

Репутация: нет
Всего: нет



Привет! Задание такое: Организовать класс прямоугольник, содержащий методы нахождения площади, периметра, длин диагоналей. Класс должен содержать не менее двух конструкторов - по умолчанию и с параметроми.

Код

#include <iostream>
#include <cmath>

using namespace std;

class Rectangle
{
public:
    Rectangle(int A, int B);
    Rectangle();
    ~Rectangle() {}
    void SetSideAB(int sideA, int sideB);
    int GetArea();
    int GetPerimiter();
    int GetDiagonal(); 
    
private:
    int a, b;
};

Rectangle::Rectangle(int A, int B)
{
    SetSideAB(A, B);
}

Rectangle::Rectangle()
{
    cout << "Введите A: ";
    cin >> a;
    cout << "Ведите B: ";
    cin >> b;
}

void Rectangle::SetSideAB(int sideA, int sideB)
{
    a = sideA;
    b = sideB;
}

int Rectangle::GetArea()
{
    int resultArea = a * b;
    
    cout << "Площадь прямоугольника: " << resultArea << endl;
    
    return resultArea;
}

int Rectangle::GetPerimiter()
{
   int resultPerimetr = 2 * (a + b);
   
   cout << "Периметр прямоугольника: " << resultPerimetr << endl;
   
   return resultPerimetr;
}

int Rectangle::GetDiagonal()
{
    int resultDiagonal = sqrt(a * a + b * b);
    
    cout << "Длина диагоналей прямоугольника: " << resultDiagonal << endl;

    return resultDiagonal;    
}

int main() 
{
    Rectangle recOne(5, 6);
    Rectangle recTwo();

    recOne.GetArea();
    recOne.GetPerimiter();
    recOne.GetDiagonal();
    
    recTwo.GetArea();
    recTwo.GetPerimiter();
    recTwo.GetDiagonal();

    return 0;
}


Ошибки выдает такие : 
Код

запрос элемента «GetArea» в «recTwo», имеющего не классовый тип «Rectangle()»
запрос элемента «GetPerimiter» в «recTwo», имеющего не классовый тип «Rectangle()»
запрос элемента «GetDiagonal» в «recTwo», имеющего не классовый тип «Rectangle()»


Что я делаю не так? Не понимаю!

--------------------
Мечты не работают, пока ты не работаешь! 
PM MAIL Skype   Вверх
maxim1000
Дата 1.10.2013, 07:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 1
Всего: 110



Цитата(ioManip @  1.10.2013,  03:37 Найти цитируемый пост)
Rectangle recTwo();

надо просто "Rectangle recTwo;"

в C++ такой синтаксис подходит и для создания объекта, и для объявления функции без аргументов, в таких случаях он выбирает объявление.

Это сообщение отредактировал(а) maxim1000 - 1.10.2013, 07:43


--------------------
qqq
PM WWW   Вверх
azesmcar
Дата 1.10.2013, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(maxim1000 @  1.10.2013,  07:43 Найти цитируемый пост)
надо просто "Rectangle recTwo;"

В данном случае это не имеет значения, так-как в конструкторе вызывается cin (кстати плохая идея), но справедливости ради стоит заметить, что результат этих двух вызовов все таки разный.
PM   Вверх
akizelokro
Дата 1.10.2013, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

Репутация: 1
Всего: 5



Цитата

Класс должен содержать не менее двух конструкторов - по умолчанию и с параметроми.


потому что надо вытащить работу с потоками из конструктора по умолчанию. А в самом конструкторе задай длины сторон по умолчанию 1 и 1, например).
А то у тебя получается очередной лоигческий конфликт. Ты создал конструктор по умолчанию, а, он, вообще-то, логически рассуждая, даже очень "не по умолчанию"

И эта.. 
Недавно один критик современного развития С++ сунул мне в нос стандарт Гуглей, в котором они вообще рекомендуют не применять потоки (но это ладно, людей миллионы, не меньше и мнений). Но суть в том, что у тебя логический диссонанс.

Добавлено через 12 минут и 23 секунды
 smile 
И эта..
Бензин, алкоголь и табак подрожают с нового года. Как работоспособный код в таких условиях писать, вообще не понимаю.


--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
volatile
Дата 1.10.2013, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



Цитата(maxim1000 @  1.10.2013,  07:43 Найти цитируемый пост)
надо просто "Rectangle recTwo;"

Вот этот первый ответ верный.
все остальные ответы к существу проблемы не относятся.

Цитата(azesmcar @  1.10.2013,  11:49 Найти цитируемый пост)
В данном случае это не имеет значения

azesmcar, внимательней посмотрите. вы неправы.

PM MAIL   Вверх
maxim1000
Дата 2.10.2013, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 1
Всего: 110



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

Причина - несколько другое поведение очень похожего кода: T x=T();

Вот пример кода (пробовать в Release-конфигурации):
Код

#include <iostream>
struct S
{
    int x;
};
int main()
{
    S s1=S();//x=0
    S s2;//x=garbage
    return 0;
}


Но как только появляется конструктор по умолчанию (написаный человеком, а не сгенерированный компилятором), отличия пропадают.


--------------------
qqq
PM WWW   Вверх
ioManip
Дата 2.10.2013, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 12.8.2011
Где: Благовещенск

Репутация: нет
Всего: нет



maxim1000
Цитата(maxim1000 @  1.10.2013,  07:43 Найти цитируемый пост)
надо просто "Rectangle recTwo;"

Действительно! Заработало! Спасибо!

azesmcar
Цитата(azesmcar @  1.10.2013,  11:49 Найти цитируемый пост)
вызывается cin (кстати плохая идея)

А как по хорошему(по правилам) будет?



Это сообщение отредактировал(а) ioManip - 2.10.2013, 10:13
--------------------
Мечты не работают, пока ты не работаешь! 
PM MAIL Skype   Вверх
azesmcar
Дата 2.10.2013, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(maxim1000 @  2.10.2013,  09:05 Найти цитируемый пост)
он иногда бы делал несколько другое

 smile 
просто не обратил внимания на конструкторы smile
это только для pod-структур и агрегатов smile 

Цитата(ioManip @  2.10.2013,  10:09 Найти цитируемый пост)
А как по хорошему(по правилам) будет?

прочитать снаружи и передать в конструктор.
у тебя он уже есть
Цитата

Rectangle(int A, int B);

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

PM   Вверх
ioManip
Дата 2.10.2013, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 12.8.2011
Где: Благовещенск

Репутация: нет
Всего: нет



Спастбо Всем! smile 
--------------------
Мечты не работают, пока ты не работаешь! 
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1193 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.