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

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

Восстановить пароль Регистрация
 
StelX
-5 / 0 / 0
Регистрация: 24.11.2014
Сообщений: 4
10.09.2015, 19:41     Передача объектов функциям #1
Задание:
"Переделать свою задачу из лабораторной 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;
 
}
Думаю понятно, что ищется объём и диаметр сферы. Также на предварительном этапе исходную задачу я немного упростил.

Скажите в каком месте (не) накосячил? На выходе выдаёт одно и тоже неприличное число. По конкретной тематике ничего не нашёл путного.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4265 / 3696 / 1243
Регистрация: 14.04.2014
Сообщений: 14,480
10.09.2015, 20:00     Передача объектов функциям #2
C++
1
2
3
4
double getVolume(Sphere &s)
{
    return 4.188790205 * pow(s.sphere_rad, 3);
}
Только поле перенеси в public.
DrOffset
6423 / 3797 / 878
Регистрация: 30.01.2014
Сообщений: 6,586
10.09.2015, 20:01     Передача объектов функциям #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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);
    }
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,155
Завершенные тесты: 1
10.09.2015, 20:12     Передача объектов функциям #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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;
}
StelX
-5 / 0 / 0
Регистрация: 24.11.2014
Сообщений: 4
10.09.2015, 20:13  [ТС]     Передача объектов функциям #5
Работает! Благодарю всех сердечно за помощь и пояснения.
Yandex
Объявления
10.09.2015, 20:13     Передача объектов функциям
Ответ Создать тему
Опции темы

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