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

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

Войти
Регистрация
Восстановить пароль
 
 
Genn55
367 / 214 / 41
Регистрация: 26.12.2012
Сообщений: 708
#1

Классы - C++

09.12.2013, 01:35. Просмотров 421. Ответов 16
Метки нет (Все метки)

Доброго всем времени суток.Пожалуйста помогите разобраться с классами.Не идут они у меня.Объяснить не кому,а просто читать и делать застопорился.Простенькие получаются чуть посложнее стопор.То же самое делаю без классов все работает в классах нет.Вот мое убожество пожалуйста подскажите в чем я так сильно заблуждаюсь.
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <stdlib.h>
#include "iostream"
 
using namespace std;
 
template <class T> //Шаблон Pr класса с параметром T
class Pr  //Объявили класс
{
  T x;
int n;
bool A_1(T x, int n) {return x < n;}//Меньше 1
bool A_1_1(T x, int n) {return (x !=0 && x!= 1);}//Не 0 и не 1
bool A_0_1(T x, int n = 0){return x >=n;}//Больше или =1
bool A_0(T x, int n){return (x == 0)&&(n ==0);}//Если 0
bool A_n(T x, int n){return x > n;}//Больше числа
bool A_2(int x, int n){return x % n;}//Проверка на целое
 
typedef void (*P)();//указатель на функцию
 
   public:
   Pr(T,int)
 {
    memset(Pf,A_1,A_1_1,A_0_1,A_0,A_n,A_2 , sizeof(Pf));
 
 }
  P Pf [6];//объявим массив из указателей на функцию
  T Oshibka (const int,const int,P Pf[]);//
  void Serror( const int);//Функция вывода строк (массив указателей)
 // void get_x(){cin>>x;}  //Функция доступна из любого места программы.
  T GetChislo ();
  void Show() //Функция внутри класса (метод класса)
         {
          cout<<x; //Метод Show отображает значение а
         }
} ;
 
int main()
{
 system("chcp 1251 > nul");
 int b;
 Pr<int> s1;
 cout << " Введите число 2  "<<"\n";
 //s1.get_x();  //Обращаемся к объекту класса и через него вызываем функцию ввода данных
 b =s1.GetChislo ();
  cout<<s1.Oshibka (5,2,Pf);  //Обращаемся к объекту класса
  return 0;
}
template <class T> T Pr <T>::GetChislo ()
{
    while (!(cin >> x) || cin.peek() != '\n')
    {
        cin.clear();
        while (cin.get() != '\n');Serror(6);
    }
 return x;
}
template <class T> void Pr <T>::Serror(const int n)
{
const char *Ar[]=
 {
" Число может быть 0 или 1                                  \n",
" Число может быть 1, 2, 3                                  \n",
" Число не может быть не четным и больше 24                 \n",
" Число не может быть   0                                   \n",
" Число не может быть меньше 1                              \n",
" Число  не может быть больше 6                             \n",
" Введен недопустимый символ.Вводить можно числа и точку    \n",
"    ОШИБКА!!!!           ОШИБКА!!!!                        \n"
"        ПОВТОРИТЕ ВВОД!                                    \n"
};
cout << Ar[7];
cout << Ar[n];
}
 template <class T> T Pr <T>::Oshibka (const int M,const int N,P Pf[])//Функция принимает указатели на функции
{
 
    x =GetChislo ();
    while ( Pf [M])
    {
        Serror(N);
    x = GetChislo();
    }
 
return x;
}
Куча ошибок хотя сами функции работают.Тоже самое просто с указателями и с массивом указателей корректно работает.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.12.2013, 01:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Классы (C++):

Непонятна тема (Классы содержащие другие классы, как данные члены ) - C++
Изучаю книгу Джесс Либерти(в частности эту главу в данный момент) #include &lt;iostream&gt; class Point { public: void SetX(int...

Программа по классам, которая использует классы точек и прямых на плоскости, а, возможно, и другие классы - C++
Нужно написать программу, которая использует классы точек и прямых на плоскости, а, возможно, и другие классы. Реализовать её нужно в трех...

Наследование, базовые классы и производные классы - C++
Добрый вечер.Задание: необходимо разработать поля и методы наследуемые из базового класса и собственные компоненты производных...

Классы и наследование (Создать класс 3D фигура, и производные классы шар, конус, цилиндр и куб. Создать функцию вычисления объёма.) - C++
Уважаевые, помогите написать прожку на экзамене: Создать класс 3D фигура, и производные классы шар, конус, цилиндр и куб. Создать функцию...

классы/дочерние классы/методы - C++
помогите пожалуйста! надо что выводились только учебеники. чтоб былo через GetTip. h файл class Book { protected: char...

Классы, включающие другие классы - C++
Столкнулся вот с таким кодом: #include &lt;iostream&gt; class Point { public: void SetX(int x) {itsX = x;} void SetY(int y) ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
alsav22
5420 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.12.2013, 02:15 #2
C++
1
Pr<int> s1;
Чтобы так создавать объект, должен быть конструктор по умолчанию.
C++
1
cout<<s1.Oshibka (5,2,Pf);
Pf - это что? Может так?
C++
1
cout << s1.Oshibka(5,2,s1.Pf);
1
Genn55
367 / 214 / 41
Регистрация: 26.12.2012
Сообщений: 708
09.12.2013, 23:07  [ТС] #3
Цитата Сообщение от alsav22 Посмотреть сообщение
C++
1
Pr<int> s1;
Чтобы так создавать объект, должен быть конструктор по умолчанию.
C++
1
cout<<s1.Oshibka (5,2,Pf);
Pf - это что? Может так?
C++
1
cout << s1.Oshibka(5,2,s1.Pf);
В этой строке я понял свою ошибку спасибо.
C++
1
cout<<s1.Oshibka (5,2,s1.Pf);  //Обращаемся к объекту класса
А как создать объект не понял и как передавать в функции сравнения число n не пойму.x берется из класса, а n нужно передавать в класс.К массивам я обращаюсь по индексам.

Добавлено через 23 минуты
Попробовал в классе создать объект
C++
1
}s1 ;
ошибка.
C++
1
Pr s1;
так тоже ошибка.А как правильно не знаю.

Добавлено через 20 часов 6 минут
Вот что получилось,но снова ошибка в 24 строке.
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <stdlib.h>
#include "iostream"
#include <cstring>
 
using namespace std;
 
template <class T> //Шаблон Pr класса с параметром T
class Pr  //Объявили класс
{
  T x;
int n;
bool A_1(T x, int n) {return x < n;}//Меньше 1
bool A_1_1(T x, int n) {return (x !=0 && x!= 1);}//Не 0 и не 1
bool A_0_1(T x, int n = 0){return x >=n;}//Больше или =1
bool A_0(T x, int n){return (x == 0)&&(n ==0);}//Если 0
bool A_n(T x, int n){return x > n;}//Больше числа
//bool A_2(int x, int n){return x % n;}//Проверка на целое
 
   public:
   typedef void (*P)();//указатель на функцию
   P Pf [6];//объявим массив из указателей на функцию
   Pr(T x,int n)//конструктор
 {
    memset(Pf,A_1,A_1_1,A_0_1,A_0,A_n , sizeof(Pf));//Ошибка
 
 }
 //P Pf [6];//объявим массив из указателей на функцию
 
  T Oshibka (const int,const int,P Pf[]);//
  void Serror( const int);//Функция вывода строк (массив указателей)
  void get_x(){cin>>x;}  //Функция доступна из любого места программы.
  T GetChislo ();
  void Show() //Функция внутри класса (метод класса)
         {
          cout<<x; //Метод Show отображает значение
         }
} ;
 
int main()
{
 system("chcp 1251 > nul");
 Pr<int> Pr(0,2);
 cout << " Введите число 2  "<<"\n";
 Pr.get_x();  //Обращаемся к объекту класса и через него вызываем функцию ввода данных
  cout<<Pr.Oshibka (5,2,Pr.Pf);  //Обращаемся к объекту класса
  return 0;
}
template <class T> T Pr <T>::GetChislo ()
{
    while (!(cin >> x) || cin.peek() != '\n')
    {
        cin.clear();
        while (cin.get() != '\n');Serror(6);
    }
 return x;
}
template <class T> void Pr <T>::Serror(const int n)
{
const char *Ar[]=
 {
" Число может быть 0 или 1                                  \n",
" Число может быть 1, 2, 3                                  \n",
" Число не может быть не четным и больше 24                 \n",
" Число не может быть   0                                   \n",
" Число не может быть меньше 1                              \n",
" Число  не может быть больше 6                             \n",
" Введен недопустимый символ.Вводить можно числа и точку    \n",
"    ОШИБКА!!!!           ОШИБКА!!!!                        \n"
"        ПОВТОРИТЕ ВВОД!                                    \n"
};
cout << Ar[7];
cout << Ar[n];
}
 template <class T> T Pr <T>::Oshibka (const int M,const int N,P Pf[])//Функция принимает указатели на функции
{
 
    x =GetChislo ();
    while ( Pf [M])
    {
        Serror(N);
    x = GetChislo();
    }
 
return x;
}
Пожалуйста подскажите хоть что нибудь иногда и намека бывает достаточно.
0
alsav22
09.12.2013, 23:36
  #4

Не по теме:

Во втором посте я вам чем-нибудь помог?

1
Genn55
367 / 214 / 41
Регистрация: 26.12.2012
Сообщений: 708
09.12.2013, 23:40  [ТС] #5
Да.
0
alsav22
5420 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
10.12.2013, 00:41 #6
Цитата Сообщение от Genn55 Посмотреть сообщение
ошибка в 24 строке.
У memset() три параметра должно быть (второй int). Что за класс у вас?
0
Genn55
367 / 214 / 41
Регистрация: 26.12.2012
Сообщений: 708
10.12.2013, 00:46  [ТС] #7
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <stdlib.h>
#include "iostream"
#include <cstring>
 
using namespace std;
 
template <class T> //Шаблон Pr класса с параметром T
class Pr  //Объявили класс
{
  T x;
int n;
bool A_1(T x, int n) {return x < n;}//Меньше 1
bool A_1_1(T x, int n) {return (x !=0 && x!= 1);}//Не 0 и не 1
bool A_0_1(T x, int n = 0){return x >=n;}//Больше или =1
bool A_0(T x, int n){return (x == 0)&&(n ==0);}//Если 0
bool A_n(T x, int n){return x > n;}//Больше числа
//bool A_2(int x, int n){return x % n;}//Проверка на целое
 
   public:
   typedef void (*P)();//указатель на функцию
   P Pf [6];//объявим массив из указателей на функцию
     Pr(T X,int C)//конструктор
 {
   x = X;
   n = C;
    memset(Pf,A_1,A_1_1,A_0_1,A_0,A_n , sizeof(Pf));//Ошибка
 
 }
  Pr()//конструктор
{
  T Oshibka (const int,const int,P Pf[]);//
  void Serror( const int);//Функция вывода строк (массив указателей)
  //void get_x(){cin>>x;}  //Функция доступна из любого места программы.
  T GetChislo ();
}
 
} ;
 
int main()
{
 system("chcp 1251 > nul");
 Pr<int> Pr(0,2);
 cout << " Введите число 2  "<<"\n";
 Pr.GetChislo ();  //Обращаемся к объекту класса и через него вызываем функцию ввода данных
 cout<<Pr.Oshibka (5,2,Pr.Pf);  //Обращаемся к объекту класса
  return 0;
}
template <class T> T Pr <T>::GetChislo ()
{
    while (!(cin >> x) || cin.peek() != '\n')
    {
        cin.clear();
        while (cin.get() != '\n');Serror(6);
    }
 return x;
}
template <class T> void Pr <T>::Serror(const int n)
{
const char *Ar[]=
 {
" Число может быть 0 или 1                                  \n",
" Число может быть 1, 2, 3                                  \n",
" Число не может быть не четным и больше 24                 \n",
" Число не может быть   0                                   \n",
" Число не может быть меньше 1                              \n",
" Число  не может быть больше 6                             \n",
" Введен недопустимый символ.Вводить можно числа и точку    \n",
"    ОШИБКА!!!!           ОШИБКА!!!!                        \n"
"        ПОВТОРИТЕ ВВОД!                                    \n"
};
cout << Ar[7];
cout << Ar[n];
}
 template <class T> T Pr <T>::Oshibka (const int M,const int N,P Pf[])//Функция принимает указатели на функции
{
 
    x =GetChislo ();
    while ( Pf [M])
    {
        Serror(N);
    x = GetChislo();
    }
 
return x;
}
овсем запутался.
0
alsav22
5420 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
10.12.2013, 00:47 #8
В чём идея класса?
0
Genn55
367 / 214 / 41
Регистрация: 26.12.2012
Сообщений: 708
10.12.2013, 00:52  [ТС] #9
Цитата Сообщение от alsav22 Посмотреть сообщение
У memset() три параметра должно быть (второй int). Что за класс у вас?
А я почему то считаю ,что конструктор принимает параметры для функций сравнения.
0
alsav22
5420 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
10.12.2013, 00:55 #10
Цитата Сообщение от Genn55 Посмотреть сообщение
А я почему то считаю ,что конструктор принимает параметры для функций сравнения.
Я разве про параметры конструктора написал?
Цитата Сообщение от alsav22 Посмотреть сообщение
У memset() три параметра
0
Genn55
367 / 214 / 41
Регистрация: 26.12.2012
Сообщений: 708
10.12.2013, 01:06  [ТС] #11
Цитата Сообщение от alsav22 Посмотреть сообщение
В чём идея класса?
Пользователь вводитс клавиатуры число.Если ввод верный число принимается как есть,если не верный выдается сообщение об ошибке и предлагается повторный ввод пока не будет верным.условия задаются с места ввода.

Добавлено через 10 минут
C++
1
memset(Pf,A_1,A_1_1,A_0_1,A_0,A_n , sizeof(Pf));
я им никогда не пользовался в первые пытаюсь использовать,но в последнем посте здесь ошибки нет,если конечно я правильно понял.
0
alsav22
5420 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
10.12.2013, 01:16 #12
http://www.cplusplus.com/reference/c...set/?kw=memset

Добавлено через 2 минуты
Pf[6] - это массив под указатели на методы класса (A_1, A_1_1 и т.д.) или под что другое?
0
Genn55
367 / 214 / 41
Регистрация: 26.12.2012
Сообщений: 708
10.12.2013, 01:23  [ТС] #13
Получается так.Выходит memset() не принимает bool ?
0
alsav22
5420 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
10.12.2013, 02:02 #14
Цитата Сообщение от Genn55 Посмотреть сообщение
Получается так.
Если это ответ на это:
Цитата Сообщение от alsav22 Посмотреть сообщение
Pf[6] - это массив под указатели на методы класса (A_1, A_1_1 и т.д.)
, то вы в курсе, что объявление указателя на функцию отличается от объявления указателя на метод класса?
1
Genn55
367 / 214 / 41
Регистрация: 26.12.2012
Сообщений: 708
10.12.2013, 02:08  [ТС] #15
Вот это наверное и есть моя глобальная ошибка.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.12.2013, 02:08
Привет! Вот еще темы с ответами:

Классы возможностей(Mixin классы) - C++
Не могу понять смысла использования mixin классов( это класс в котором есть только методы и нет членов-данных) Т.е. к примеру у нас...

Динамические массивы структур;Классы. Класс массивы структур;Классы. Класс динамического массива структур. - C++
Здраствуйте.Помогите с практичкой мое задание 4.3. Строка таблицы данных содержит следующую информацию о владельцах авто: ф.и.о....

Классы - C++
Есть у меня вот такой класс никак не могу понять почему он ругается на методы CVector operator*(CVector &amp;v,CMatrix &amp;m) u CVector...

Классы - C++
Пожалуйста помогите разобраться не получается класс с указателями на функции. #include &lt;stdlib.h&gt; #include &quot;iostream&quot; using...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
10.12.2013, 02:08
Ответ Создать тему
Опции темы

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