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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
Nikit@132
Сообщений: n/a
#1

Разработать класс Circle - C++

10.04.2013, 20:47. Просмотров 1340. Ответов 10
Метки нет (Все метки)

подключите пожалуйста библиотеки в отдельных проетах
Разработать класс Circle, обеспечивающий расчёт площади и длины окружности.
Класс должен включать в себя поле r-радиус окружности, а также методы:
double per()-вычисляет длину окружности фигуры
double area()-вычисляет площадь фигуры
void print()-выводит на экран сведение о фигуре
ПРЕДМЕТ Объектно ориентированное программирование 1 курс 2 семестр ВУЗ:МИИТ
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Черный ворон
129 / 123 / 6
Регистрация: 31.01.2012
Сообщений: 435
10.04.2013, 23:54     Разработать класс Circle #2
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
#include <iostream.h>
class Circle{
private:
        #define M_PI 3.14159265358979323846
        double r;
public:
        Circle(void){r=0;}
        Circle(double radius){r=radius;}
        Circle(Circle& c){r=c.r;}
        ~Circle(void){}
 
        double per(){return 2*M_PI*r;}
        double area(){return M_PI*r*r;}
        void print(){
                cout<<"radius= "<<r<<endl;
                cout<<"perimetr= "<<per()<<endl;
                cout<<"srea= "<<area()<<endl;
        }
 
};
 
int main()
{
Circle A(5.5);
A.print();
system("pause");
        return 0;
}
ValeryS
Модератор
6483 / 4949 / 455
Регистрация: 14.02.2011
Сообщений: 16,394
10.04.2013, 23:57     Разработать класс Circle #3
Цитата Сообщение от Черный ворон Посмотреть сообщение
private:
* * * * #define M_PI 3.14159265358979323846
А это зачем

Добавлено через 1 минуту
Цитата Сообщение от Черный ворон Посмотреть сообщение
#include <iostream.h>
Цитата Сообщение от Черный ворон Посмотреть сообщение
cout<<"radius= "<<r<<endl;
на ВС 3.1 пишешь?
Черный ворон
129 / 123 / 6
Регистрация: 31.01.2012
Сообщений: 435
11.04.2013, 00:57     Разработать класс Circle #4
ValeryS,
Цитата Сообщение от ValeryS Посмотреть сообщение
А это зачем
а как Вы посчитаете площадь и радиус без числа Пи?


Цитата Сообщение от ValeryS Посмотреть сообщение
на ВС 3.1 пишешь?
с чего Вы это взяли? вроде бы не замечал, чтобы синтаксис потокового вывода сильно изменялся.
да и директивы препроцессора вроде все те же.
разве что сейчас просто <iostream> для этого заголовочного файла достаточно (может поэтому Вы так решили)
конкретно этот пример был скомпилирован в "шестом "Builder'е
ValeryS
Модератор
6483 / 4949 / 455
Регистрация: 14.02.2011
Сообщений: 16,394
11.04.2013, 01:52     Разработать класс Circle #5
Цитата Сообщение от Черный ворон Посмотреть сообщение
а как Вы посчитаете площадь и радиус без числа Пи?
я не про пи ( хотя он есть в библиотеке )
а про макрос в описании класса
зачем это?

Цитата Сообщение от Черный ворон Посмотреть сообщение
вроде бы не замечал, чтобы синтаксис потокового вывода сильно изменялся.
серьезно? не замечал?
а то что заголовочный файл изменился?
и появилось пространство имен
и писать нужно так( объявить пространство имен)
C++
1
using namespace std;
или так (каждый раз вызывать из пространства)
C++
1
std::cout
Черный ворон
129 / 123 / 6
Регистрация: 31.01.2012
Сообщений: 435
11.04.2013, 09:35     Разработать класс Circle #6
Цитата Сообщение от ValeryS Посмотреть сообщение
зачем это?
препроцессор в любом случае отрабатывает раньше компилятора. на мой взгляд этим фактом тоже надо уметь пользоваться и применять.
да и где ему еще быть, если не внутри класса? Если ООП подразумевает, что есть только свойства и методы. более ничего.

Цитата Сообщение от ValeryS Посмотреть сообщение
Код C++
1
using namespace std;
возможно так. наверно это было бы и правильнее. хотя сомнительно, чтобы в таком коротком коде возникли конфликты с именами.


но вот по поводу этого я видел холивары о загромождении кода. так что есть тенденция, что такое не есть хорошо.
Цитата Сообщение от ValeryS Посмотреть сообщение
Код C++
1
std::cout
lemegeton
2916 / 1345 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
11.04.2013, 09:52     Разработать класс Circle #7
Все-таки нехватает геттера и сеттера для радиуса, "лишние" конструктор копирования и деструктор. Кстати, где тогда оператор присваивания? M_PI есть в cmath'е.

Вариант кода по прошлому стандарту.
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
#include <cmath>
#include <iostream>
#include <iomanip>
 
class Circle {
 public:
  Circle() : radius(0) {}
  Circle(double radius) : radius(radius) {}
  double getRadius() const { return radius; }
  void setRadius(double radius) { this->radius = radius; }
  double getArea() const { return M_PI * getRadius() * getRadius(); }
  double getPerimeter() const { return 2 * M_PI * getRadius(); }
  void print() const {
    std::cout << "Circle{radius=" << std::fixed << std::setprecision(3) <<
      getRadius() << ",area=" << getArea() << ",perimeter=" <<
      getPerimeter() << "}" << std::endl;
  }
 private:
  double radius;
};
 
int main(int argc, char *argv[]) {
  Circle(10.12).print();
  Circle(2.3).print();
  Circle(7.7).print();
 
  std::cin.get();
  return 0;
}
Не нравятся мне задания, где просят вывод в самом классе реализовывать. Это неправильно, когда столь узкоспециализированный класс занимается собственным выводом.

Цитата Сообщение от Черный ворон Посмотреть сообщение
но вот по поводу этого я видел холивары о загромождении кода. так что есть тенденция, что такое не есть хорошо.
Холивары ведут те, кто не писал крупный и очень крупный софт, остальные начинают догадываться, что такое namespace'ы, как ими пользоваться и почему не надо все пихать в один namespace. Тем более в std.
Черный ворон
129 / 123 / 6
Регистрация: 31.01.2012
Сообщений: 435
11.04.2013, 10:15     Разработать класс Circle #8
Цитата Сообщение от lemegeton Посмотреть сообщение
"лишние" конструктор копирования и деструктор. Кстати, где тогда оператор присваивания?
верно о операторе присваивания забыл. каюсь. нечто такое
C++
1
2
3
4
Circle& operator = (Circle& c) {
        r=c.r;
        return *this;
}
но как может быть лишним деструктор? он в любом случае будет, если не ошибаюсь. просто пустым его добавит компилятор, а не я. Хотя когда-то препод мне говорил, что деструктор, хоть и пустой, лучше писать явно тем самым показывая, что осознаешь для чего он, как действует и какой должен быть в каждом конкретном случае. здесь динамически память не выделяется, да. но деструктор то все равно будет.

Цитата Сообщение от lemegeton Посмотреть сообщение
Холивары ведут те, кто не писал крупный и очень крупный софт, остальные начинают догадываться, что такое namespace'ы, как ими пользоваться и почему не надо все пихать в один namespace. Тем более в std.
спасибо, учту
ValeryS
Модератор
6483 / 4949 / 455
Регистрация: 14.02.2011
Сообщений: 16,394
11.04.2013, 10:38     Разработать класс Circle #9
Цитата Сообщение от Черный ворон Посмотреть сообщение
препроцессор в любом случае отрабатывает раньше компилятора.
и что ???
#define это просто подмена
там где увидит M_PI там вставит 3.14159265358979323846
Цитата Сообщение от Черный ворон Посмотреть сообщение
Если ООП подразумевает, что есть только свойства и методы. более ничего.
define к ООП не имеет никакого отношения
не зря рекомендуют им пользоваться ( не возможно контролировать)
рекомендуется const

Цитата Сообщение от Черный ворон Посмотреть сообщение
возможно так. наверно это было бы и правильнее. хотя сомнительно, чтобы в таком коротком коде возникли конфликты с именами.
тут не конфликт имен
тут просто не будет видно функций
пространство имен не объявлено



Цитата Сообщение от Черный ворон Посмотреть сообщение
но вот по поводу этого я видел холивары о загромождении кода.
холивары на то и холивары что есть одни эмоции

я же сказал есть два пути

тебя спасло что компилятор поддерживает старый стандарт, а например VS2008( и позднее) выдаст кучу ошибок

я где то видел такую реализацию #include <iostream.h>
C++
1
2
#include <iostream>
using namespace std;
для поддержки старых программ
может у тебя так же реализован?
Черный ворон
129 / 123 / 6
Регистрация: 31.01.2012
Сообщений: 435
11.04.2013, 10:52     Разработать класс Circle #10
Цитата Сообщение от ValeryS Посмотреть сообщение
для поддержки старых программ
может у тебя так же реализован?
может и так. наверное стоит покопаться в некоторых *.h для общего развития.
хотя в math.h, кажется, M_PI прописан тоже с помощью define
собственно на истинность и соответствие стандартам я и не претендовал, только учусь. новые знания всегда полезны. спасибо за поправки.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.04.2013, 11:29     Разработать класс Circle
Еще ссылки по теме:

Разработать класс и производный класс C++
Требуется разработать класс C++
C++ Класс Circle (круг), который вычисляет площадь и периметр по радиусу
C++ Разработать класс
C++ Разработать класс Матрица

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

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6483 / 4949 / 455
Регистрация: 14.02.2011
Сообщений: 16,394
11.04.2013, 11:29     Разработать класс Circle #11
Цитата Сообщение от Черный ворон Посмотреть сообщение
хотя в math.h, кажется, M_PI прописан тоже с помощью define
Но не в классе же
Yandex
Объявления
11.04.2013, 11:29     Разработать класс Circle
Ответ Создать тему
Опции темы

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