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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.02.2014, 22:00   #1
dkii
Пользователь
 
Регистрация: 11.12.2013
Сообщений: 54
Стрелка Дружественные классы эллипс и круг

Здраствуйте, увадаемые форумчане помогите пожалуйста
Задача.
1. Описать независимые классы и определить их методы. Атрибуты и все методы классов, кроме конструкторов и выделенных методов, должны быть защищены. Изменение объектов с помощью методов запрещается.
2. Составить программу, в которой реализовать работу с соответствующими объектами.

Элемент 1:
Класс 1 - Круг
Метод - Длина

Элемент 2:
Класс 2 - Эллипс
Вычисление - метод должен определить, во сколько раз длина эллипса больше длины конкретного круга

класс 2
дружественный к
класса 1

Небольшой набросок

Код:
#include <iostream>
#include <cmath>
#define M_PI 3.14159265358979323846
using namespace std;
 
class Elips
{
protected:
    float a, b;
public:
    Elips(float a, float b);
    float L(void);
    void show_Elips(void);
};
void metod1(); 
 
private: 
 
};
 
class Circle{
private:
        double r;
public:
        Circle(void){r=0;}
        Circle(double radius){r=radius;}
        Circle(Circle& c){r=c.r;}
        ~Circle(void){}
 
        double dlina(){return 2*M_PI*r;}
        void print(){
                cout<<"radius= "<<r<<endl;
                cout<<"dlina= "<<dlina()<<endl;
        }
 
};
void metod1(); 
 
private: 
 
};
int main()
{
Circle A(5.5);
A.print();
system("pause");
return 0;
}
dkii вне форума Ответить с цитированием
Старый 27.02.2014, 07:20   #2
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Дак что ты не можешь сделать? - вычислить длину эллипса? или поделить длину эллипса на длину круга? или написать слово private в нужном месте? или ... что то еще?
rrrFer вне форума Ответить с цитированием
Старый 27.02.2014, 20:30   #3
dkii
Пользователь
 
Регистрация: 11.12.2013
Сообщений: 54
По умолчанию

не знаю, как это все реализовать
dkii вне форума Ответить с цитированием
Старый 27.02.2014, 22:42   #4
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
не знаю, как это все реализовать
Что именно?
http://ru.wikipedia.org/wiki/%D0%AD%...B8%D0%BF%D1%81
тут написано как вычислить длину дуги.
Где попытки сделать что-то самостоятельно?
rrrFer вне форума Ответить с цитированием
Старый 28.02.2014, 21:53   #5
dkii
Пользователь
 
Регистрация: 11.12.2013
Сообщений: 54
По умолчанию

помогите .
dkii вне форума Ответить с цитированием
Старый 01.03.2014, 09:47   #6
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Хороший у Вас набросок. Сделайте так, чтобы он компилировался. А при вызове методов выводил их названия, к примеру:

Код:
void show_Elips(void) {
    std::cout << "void show_Elips(void)" << std::endl;
}
И выложите этот код сюда, тогда дальше поразвиваем
8Observer8 вне форума Ответить с цитированием
Старый 02.03.2014, 16:15   #7
dkii
Пользователь
 
Регистрация: 11.12.2013
Сообщений: 54
По умолчанию

Код:
#include <iostream>
#include <cmath>
#define M_PI 3.14159265358979323846
using namespace std;
 
class Elips
{
protected:
    float a, b;
public:
    Elips(float a, float b);
    float L(void);
};
class Circle{
private:
        double r;
public:
        Circle(void){r=0;}
        Circle(double radius){r=radius;}
        Circle(Circle& c){r=c.r;}
        ~Circle(void){}
        friend Elips;
        double dlina(){return 2*M_PI*r;}
 
};

void print()
{
                cout<<"print"<<endl;
}
void show_Elips(void)
{
cout << "void show_Elips(void)" <<endl;
}

int main()
{
print();
show_Elips();
Elips Elips();
system("pause");
}

Последний раз редактировалось dkii; 02.03.2014 в 16:31.
dkii вне форума Ответить с цитированием
Старый 02.03.2014, 16:45   #8
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Замечания:

- ellipse - пишется с двумя 'l'

- используйте double вместо float

- в функция main() должна возвращать значение:

Код:
int main() {
    return 0;
}
- советую закрытые переменные снабжать приставкой "m_", к примеру:

Код:
class Circle {
private:
    double m_r;
    // ...
};
- этот конструктор копирования здесь не нужен:

Код:
    Circle(Circle& c) {
        r = c.r;
    }
- не используйте названия переменных, функций и т.д. в таком виде: dlina() Напишите лучше perimeter()

- что за функция L() ? Напишите внятное имя и добавьте реализацию, так:

Код:
class Ellips {
public:
    // ...
    double L();
};

double Ellips::L() {
    
}
- добавьте заглушки (как в предыдущем пункте) ко всем функциям. Для конструктора добавьте: Ellips(float a, float b)

- писать void в параметре функции, которая ничего не принимает, не нужно. Вместо: void func(void), нужно: void func()

P.S. Покажите код со всеми исправлениями выше, тогда продолжим дальше
8Observer8 вне форума Ответить с цитированием
Старый 02.03.2014, 17:08   #9
dkii
Пользователь
 
Регистрация: 11.12.2013
Сообщений: 54
По умолчанию

Код:
#include <iostream>
#include <cmath>
#define M_PI 3.14159265358979323846
using namespace std;
 
class Ellips {
public:

    //double L();

};

double Ellips::L(float a, float b)
{
    
}
class Circle{
private:
        double m_r;
public:
        Circle(void){m_r=0;}
        Circle(double radius)
		{m_r=radius;}
        ~Circle(void){}
        friend Ellips;
        //double perimeter(){return 2*M_PI*m_r;}
 
};

void print()
{
                cout<<"print"<<endl;
}
void show_Ellips()
{
cout << "void show_Elips(void)" <<endl;
}

int main()
{
print();
show_Ellips();
Ellips Ellips();
return 0;
system("pause");
}
Насчет L незнаю как ёё назвать, в ней должна возвращатся длина эллипса.
dkii вне форума Ответить с цитированием
Старый 02.03.2014, 17:34   #10
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Что значит: "длина эллипса"? Это тоже самое, что и длина окружности? тогда назовите тоже perimeter()

- у Вас команда "system("pause");" НИКОГДА не выполнится, так как произойдёт выход из программы при выполнении "return 0;" То есть "return 0;" должен располагаться перед последней закрывающей фигурной скобкой

Код:
system("pause");
return 0;
}
- зачем Вы закомментировали: double L();? исправьте её на perimeter() (если имеется ввиду длина окружности эллипса)

- а куда убрали объявление конструктора, который принимает два параметра?

- float на double нужно везде заменить

- у каждого метода должны быть: объявление и реализация. Пусть в нашем случае мы будем выводить название метода и его параметры. Реализуйте Ваши методы, как в коде ниже, тогда продолжим дальше

Код:
#include <iostream>
#include <cmath>
using namespace std;

class Ellips {
public:
    Ellips(double a, double b);
    double perimeter();
};

Ellips::Ellips(double a, double b) {
    cout << "Constructor Ellips";
    cout << "a = " << a << endl;
    cout << "b = " << b;
    cout << endl;
}

double Ellips::perimeter() {
    double result = 0.0;
    cout << "result = " << result;
    return result;
}

int main() {
    double a = 5.5;
    double b = 5.5;
    Ellips ellips(a, b);
    ellips.perimeter();
    return 0;
}
P.S. И чтобы всё выводилось на экран
8Observer8 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Наклонный эллипс SomeBod Компоненты Delphi 2 12.02.2016 02:04
C++: Классы, перегрузка операторов, дружественные функции. Lingri Помощь студентам 6 20.09.2013 21:22
Делфи,эллипс Ильгизуля Помощь студентам 1 21.05.2013 22:58
Дружественные классы и protected Stiker Помощь студентам 1 10.01.2013 00:57
Дружественные функции и классы Opiym Помощь студентам 1 05.04.2010 21:51