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

Классы - C++

Восстановить пароль Регистрация
 
Mr. Pyatachok
 Аватар для Mr. Pyatachok
8 / 8 / 0
Регистрация: 30.06.2011
Сообщений: 250
01.07.2011, 13:57     Классы #1
Help, пытаюсь самостоятельно постигнуть классы, компилятор ругается, помогите где ошибка и как исправить:
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
#include<stdio.h>
#include<conio.h>
#include<math.h>
 
class V
{
 public:
 V (float x,float y,float z);
 float run(float x,float y,float z)
  {
    return((sqrt(10*(pow(x,1/3)+pow(x,(y+2)))))*(pow(asin(z),2)-abs(x-y)));
  }
  private:
  float x,y,z;
};
 
void main()
{
 V primer();
 float x,y,z,b;
 printf("Vvedite x,y,z: ");
 scanf("%f%f%f",&x,&y,&z);
 b=primer.run(x,y,z);
 printf("b= ",b);
 
 getch();
}
 Комментарий модератора 
Используйте теги форматирования кода!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.07.2011, 13:57     Классы
Посмотрите здесь:

Классы C++
C++ КЛАССЫ
C++ Классы
классы C++
Классы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
01.07.2011, 14:09     Классы #2
Mr. Pyatachok, 1. Вы объявили конструктор с тремя параметрами, но где его реализация?
2. Поскольку вы объявили конструктор с параметрами, конструктор по умолчанию автоматически сгенерирован не будет, однако вы пытаетесь вызвать его в строке 19.
3. В строке же 19 вы неверно вызываете конструктор по умолчанию, даром что он отсутствует. Пустые скобки писать не надо.
4. Архитектура класса неверна. Если вы храните данные x, y, z в качестве полей класса, не надо передавать их в функцию run, она должна использовать эти самые поля в качестве исходных данных.
5. Пишете на плюсах - используйте потоки, а не сишный ввод-вывод.
6. int main(), сколько раз обсуждалось.
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
01.07.2011, 14:12     Классы #3
Плюс неочевидная ошибка: 1/3 == 0
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
01.07.2011, 14:13     Классы #4
grizlik78, на формулу не глядел)) Не в ней суть))
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
01.07.2011, 14:14     Классы #5
silent_1991, да я понял. Это чтобы 2 раза не вставать, когда появится вопрос: почему считает неправильно!
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
01.07.2011, 14:16     Классы #6
grizlik78, ясненько))

Mr. Pyatachok, примерно так по-хорошему должен был бы выглядеть класс:

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
#include <iostream>
#include <cmath>
 
class V
{
public:
    V():
    m_x(),
    m_y(),
    m_z()
    {
    }
 
    V(double x, double y, double z):
    m_x(x),
    m_y(y),
    m_z(z)
    {
    }
 
    double run() const
    {
        return sqrt(10.0 * (pow(m_x, 1.0 / 3.0) + pow(m_x, m_y + 2.0))) * (pow(asin(m_z), 2.0) - abs(m_x - m_y));
    }
 
private:
    double m_x;
    double m_y;
    double m_z;
};
 
int main()
{
    double x, y, z;
 
    std::cout << "Enter x: ";
    std::cin >> x;
    std::cout << "Enter y: ";
    std::cin >> y;
    std::cout << "Enter z: ";
    std::cin >> z;
 
    V v(x, y, z);
 
    std::cout << "Result: " << v.run() << std::endl;
 
    return 0;
}
Mr. Pyatachok
 Аватар для Mr. Pyatachok
8 / 8 / 0
Регистрация: 30.06.2011
Сообщений: 250
01.07.2011, 14:42  [ТС]     Классы #7
Цитата Сообщение от silent_1991 Посмотреть сообщение
grizlik78, ясненько))

Mr. Pyatachok, примерно так по-хорошему должен был бы выглядеть класс:

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
#include <iostream>
#include <cmath>
 
class V
{
public:
    V():
    m_x(),
    m_y(),
    m_z()
    {
    }
 
    V(double x, double y, double z):
    m_x(x),
    m_y(y),
    m_z(z)
    {
    }
 
    double run() const
    {
        return sqrt(10.0 * (pow(m_x, 1.0 / 3.0) + pow(m_x, m_y + 2.0))) * (pow(asin(m_z), 2.0) - abs(m_x - m_y));
    }
 
private:
    double m_x;
    double m_y;
    double m_z;
};
 
int main()
{
    double x, y, z;
 
    std::cout << "Enter x: ";
    std::cin >> x;
    std::cout << "Enter y: ";
    std::cin >> y;
    std::cout << "Enter z: ";
    std::cin >> z;
 
    V v(x, y, z);
 
    std::cout << "Result: " << v.run() << std::endl;
 
    return 0;
}
sorri, я еще ламер, зачем V():
m_x(),
m_y(),
m_z()
{
}
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
01.07.2011, 14:46     Классы #8
Конструктор по умолчанию, в данном случае инициализирует переменные нулями.
Mr. Pyatachok
 Аватар для Mr. Pyatachok
8 / 8 / 0
Регистрация: 30.06.2011
Сообщений: 250
01.07.2011, 14:50  [ТС]     Классы #9
Цитата Сообщение от silent_1991 Посмотреть сообщение
Конструктор по умолчанию, в данном случае инициализирует переменные нулями.
значит, туда можно подставлять числовые значения, я правильно понимаю?
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
01.07.2011, 15:01     Классы #10
Mr. Pyatachok, куда туда?
ValeryLaptev
Эксперт C++
1004 / 783 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
01.07.2011, 15:03     Классы #11
Цитата Сообщение от Mr. Pyatachok Посмотреть сообщение
значит, туда можно подставлять числовые значения, я правильно понимаю?
Правильно. Более того, можно выражения писать, которые приводятся к типу поля.
Читайте в книжках "список инициализации конструктора".
Mr. Pyatachok
 Аватар для Mr. Pyatachok
8 / 8 / 0
Регистрация: 30.06.2011
Сообщений: 250
01.07.2011, 15:13  [ТС]     Классы #12
сорри, затупил, не туды написал ,а как если в public писать все переменные, сильно чем отличаться будет, не судите строго о степени моей тупости, простто хочу разобраться, и еще вопросик: private для чего?
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
01.07.2011, 15:18     Классы #13
Mr. Pyatachok, одна из основ ООП - инкапсуляция + сокрытие данных. Вы не даёте пользователю самостоятельно "крутить шестерёнки" вашего класса (т.е. не даёте ему доступа к закрытым переменным), но даёте ему "рычаги и педали" (т.е. открытые методы), которые пользователь будет "дёргать и нажимать" (вызывать) и которые и будут эти самые "шестерёнки" "крутить". private как раз для этого. Члены, описанные в этой секции, доступны только изнутри класса.
Mr. Pyatachok
 Аватар для Mr. Pyatachok
8 / 8 / 0
Регистрация: 30.06.2011
Сообщений: 250
01.07.2011, 15:27  [ТС]     Классы #14
я так понял, что вышеприведенный код является конструктором по умолчанию, а как будет выглядеть просто в виде конструктора, извините еще раз, я только пытаюсь разобраться на данном примере, разбираю разные методы
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.07.2011, 15:31     Классы
Еще ссылки по теме:

C++ Классы
C++ классы C++
Классы C++

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

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
01.07.2011, 15:31     Классы #15
Mr. Pyatachok, вышеприведённый код является реализацией класса и функции main с примером использования этого класса. Класс же содержит конструктор по умолчанию (инициализирующий поля нулями), конструктор с параметрами (инициализирующий поля значениями параметров) и метода run, который выполняет некую работу. Советую вам почитать про классы в С++, конструкторы и всё вытекающее. Вы не владеете терминологией, поэтому с вами очень трудно общаться. Заполните этот пробел, а что не понятно - спрашивайте.
Yandex
Объявления
01.07.2011, 15:31     Классы
Ответ Создать тему
Опции темы

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