Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
-4 / 1 / 0
Регистрация: 24.11.2014
Сообщений: 4
1

Передача объектов функциям

10.09.2015, 19:41. Просмотров 1066. Ответов 4
Метки нет (Все метки)

Задание:
"Переделать свою задачу из лабораторной N, сделав функции не частью класса, а внешними, использующими объекты в качестве параметров и возвращаемого значения."

Исходный код:
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
52
53
54
55
56
57
#include <iostream>
#include <conio.h>
#include <stdlib.h>
 
/*Создайте класс, содержащий 1 закрытую переменную (радиус шара) и открытые функции (для присвоения значений закрытым переменным, 
для получения значения закрытых переменных, для получения объема шара и его диамет-ра). Пользователь вводит значение с клавиатуры, 
оно передается в закрытую переменную и используется в функци-ях.*/
 
using namespace std;
 
class Sphere 
{
    double sphere_rad;
public:
    void setSphereRad(double value);
    double getVolume();
    double getDiameter();
};
 
void Sphere::setSphereRad(double value)
{
    sphere_rad=value;
}
 
double Sphere::getVolume()
{
    double volume;
    volume=4.188790205*pow(sphere_rad,3);
    //cout<<volume;
    return volume;
}
 
double Sphere::getDiameter()
{
    double diameter;
    diameter=2*sphere_rad;
    //cout<<diameter;
    return diameter;
}
 
int main()
{
    double r;
    class Sphere obj;
 
    cout<<"Enter the sphere radius:";
    cin>>r;
    obj.setSphereRad(r);
    system("CLS");
    cout<<"Sphere radius = "<<r<<"\n\n";
    cout<<"Diameter of a sphere is equal to  "<<obj.getDiameter()<<"\n";
    cout<<"Volume of a sphere is equal to  "<<obj.getVolume()<<"\n";
 
    system("pause");
    return 0;
 
}


То что получилось после переделок:
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
#include <iostream>
#include <conio.h>
#include <stdlib.h>
 
using namespace std;
 
class Sphere 
{
    double sphere_rad;
    double v;
public:
    void setSphereRad(double value);
    double getDiameter();
    double setVolume(double sphere_rad){double v=4.188790205*pow(sphere_rad,3); return v;}
    void showVolume(){cout<< v;};
    
};
 
 
Sphere getVolume(double sphere_rad)
{
    double v;
    Sphere volume;
    volume.setVolume(sphere_rad);
    return volume;
}
 
int main()
{
    double r=3;
    class Sphere obj;
    obj=getVolume(r);
    obj.showVolume();
 
    system("pause");
    return 0;
 
}
Думаю понятно, что ищется объём и диаметр сферы. Также на предварительном этапе исходную задачу я немного упростил.

Скажите в каком месте (не) накосячил? На выходе выдаёт одно и тоже неприличное число. По конкретной тематике ничего не нашёл путного.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.09.2015, 19:41
Ответы с готовыми решениями:

Передача объектов функциям(объясните код программы)
Вот программа: #include &lt;iostream&gt; using namespace std; class samp { int i; public:...

Передача массивов функциям
Динамическое выделение памяти под массив; * Функцию SetArray, предоставляющая пользователю...

Передача функциям строк
Нужно отсортировать массив строк методом выбора. Вот функция которую я побровал написать, но она...

Ofstream в структуре и передача этой структуры по функциям
Добрый день. Задача следующая: есть структура, в данном случае - Ofstr. В ней *stream - поток на...

4
6909 / 5974 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
10.09.2015, 20:00 2
C++
1
2
3
4
double getVolume(Sphere &s)
{
    return 4.188790205 * pow(s.sphere_rad, 3);
}
Только поле перенеси в public.
1
13475 / 7138 / 1712
Регистрация: 30.01.2014
Сообщений: 11,941
10.09.2015, 20:01 3
Лучший ответ Сообщение было отмечено StelX как решение

Решение

StelX,
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
#include <iostream>
#include <conio.h>
#include <stdlib.h>
 
using namespace std;
 
class Sphere 
{
    double sphere_rad;
    double v;
public:
    void setSphereRad(double value);
    double getDiameter();
// накосячил здесь
    double setVolume(double sphere_rad){double v=4.188790205*pow(sphere_rad,3); return v;} 
// v - локальная переменная, которая скрывает переменную класса
// в книжках читать про: области видимости
    void showVolume(){cout<< v;};
    
};
 
 
Sphere getVolume(double sphere_rad)
{
    double v; // не нужно
    Sphere volume;
    volume.setVolume(sphere_rad);
    return volume;
}
 
int main()
{
    double r=3;
    class Sphere obj; // class писать не нужно
    obj=getVolume(r);
    obj.showVolume();
 
    system("pause");
    return 0;
 }
Переделать можно так:
C++
1
2
3
4
    void setVolume(double sphere_rad)
    {
        v = 4.188790205 * pow(sphere_rad, 3);
    }
1
Модератор
Эксперт С++
9802 / 8363 / 5091
Регистрация: 18.12.2011
Сообщений: 22,371
10.09.2015, 20:12 4
Лучший ответ Сообщение было отмечено StelX как решение

Решение

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
#include <iostream>
using namespace std;
 
class Sphere 
{
    double sphere_rad;
public:
    Sphere():sphere_rad(0){}
    Sphere(double value):sphere_rad(value){}
    Sphere(const Sphere& s):sphere_rad(s.sphere_rad){}
    double GetRadius()
    {
        return sphere_rad;
    }
};
 
 
double GetVolume(Sphere& v)
{
    double r=v.GetRadius();
    return 4.188790205*r*r*r;
}
 
int main()
{
    double r=3.0;
    class Sphere obj(r);
    cout<<GetVolume(obj)<<endl;
    system("pause");
    return 0;
}
1
-4 / 1 / 0
Регистрация: 24.11.2014
Сообщений: 4
10.09.2015, 20:13  [ТС] 5
Работает! Благодарю всех сердечно за помощь и пояснения.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.09.2015, 20:13

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

Передача объектов дочерних классов через массив объектов родительского класса в функцию
Здравствуйте. Возможно, вопрос больше относится к теории ООП, но все же я не решился задавать его в...

Передача параметров функциям. Можно ли изменить этот параметр внутри функции
Доброго времени суток, господа знатоки.В универе препод задал сделать проверку входных данных на...

Задачи по функциям. Объясните задачу по функциям)
Вводится последовательность из N целых чисел. Для каждого числа последовательности вывести новое...

Передача параметров функциям
Доброго времени суток! Уважаемые форумчане, подскажите, почему вот так можно: .data a dd...

Передача аргументов пользовательским функциям
Здравствуйте, возникла проблема с функциями... Пример: $number = 3; function...

Передача функции в качестве переменных другим функциям
Возможно ли в PHP передавать функции в качестве аргумента методам класса? Например есть такой код:...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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