0 / 0 / 1
Регистрация: 21.11.2015
Сообщений: 217
1

Как объявить статический метод класса?

10.03.2016, 19:24. Показов 1160. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
выдает ошибку на 11 16 19 строку(((((((

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
#include <iostream>
using namespace std;
class Sop
{
private:
short int kol;
short int kol2;
char *arr;
char *arr2;
static char *arr3;
short int kol3;
public:
void pol();
void vvod();
void vivod();
static int &kol3; 
static char meth();
};
Sop::static meth()
{
return Sop::&kol2;
}
 
void Sop::pol()
{
cout<<"Vvedite razmer massiva: ";
cin>>kol;
arr = new char[kol];
arr2 = new char[kol2];
arr3 = new char[kol3++];
return;
}
 
void Sop::vvod()
{
cout<<"Vvedite dannie: \n";
for(int i = 0; i < kol; i++)
{
  cout <<"A["<<i+1<<"] = ";
  cin >> arr[i];
}
}
void Sop::vivod()
{       
cout << "Massiv: \n";
for(int i = 0; i < kol; i++)   
  cout <<"A["<<i+1<<"] = "<<arr[i]<<";\n";
}
int main()
{
Sop a;
  a.pol();
  a.vvod();
   void (Sop::*fp)();
   fp = &Sop::vvod;
   
   (a.*fp)();
   a.meth();
   
  
 
return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.03.2016, 19:24
Ответы с готовыми решениями:

Как правильно объявить статический метод
например class A { private: static void method(); // объявление }; // как...

Почему нельзя объявить в описание класса статический double?
Ближе к делу :) class SuperClass { public: SuperClass() {} static const int A = 0;...

Как передать нестатическое поле в статический метод класса?
есть статическая фукция static LRESULT CALLBACK WndProc ( HWND,UINT,WPARAM,LPARAM); в ней...

Как объявить другом конкретный метод другого класса?
Как в одном классе объявить другом метод другого класса?

11
BrainOverflow
126 / 130 / 64
Регистрация: 31.03.2013
Сообщений: 556
10.03.2016, 19:29 2
Светлана Слонь,
C++
1
static short int kol2;
0
0 / 0 / 1
Регистрация: 21.11.2015
Сообщений: 217
10.03.2016, 19:34  [ТС] 3
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
#include <iostream>
using namespace std;
class Sop
{
private:
short int kol;
short int kol2;
char *arr;
char *arr2;
static char *arr3;\\Статическое поле такого же типа(char);
short int kol3;\\для статического поля
public:
void pol();
void vvod();
void vivod();
static int &kol3; \\для взятия адреса
static char meth();\\функция для взятия адреса
};
Sop::static meth()\\взятие адреса
{
return Sop::&kol2;
}
 
void Sop::pol()
{
cout<<"Vvedite razmer massiva: ";
cin>>kol;
arr = new char[kol];
arr2 = new char[kol2];
arr3 = new char[kol3++];\\увеличение памяти статического массива на 1
return;
}
 
void Sop::vvod()
{
cout<<"Vvedite dannie: \n";
for(int i = 0; i < kol; i++)
{
  cout <<"A["<<i+1<<"] = ";
  cin >> arr[i];
}
}
void Sop::vivod()
{       
cout << "Massiv: \n";
for(int i = 0; i < kol; i++)   
  cout <<"A["<<i+1<<"] = "<<arr[i]<<";\n";
}
int main()
{
Sop a;
  a.pol();
  a.vvod();
   void (Sop::*fp)();\\ указатель на функцию класса
   fp = &Sop::vvod;
   
   (a.*fp)();
   a.meth();
   
  
 
return 0;
}
Добавлено через 38 секунд
но нам же надо для статического поля
0
BrainOverflow
126 / 130 / 64
Регистрация: 31.03.2013
Сообщений: 556
10.03.2016, 19:35 4
Что это?
Цитата Сообщение от Светлана Слонь Посмотреть сообщение
Sop::static meth()
{
return Sop::&kol2;
}
C++
1
2
3
4
char Sop::meth()
    {
        return kol2;
    }
Кликните здесь для просмотра всего текста
пишу только то, из-за чего программа не компилируется, а зачем вы возвращаете тип short int при указанном типе возвращаемого значения char и т.д. не хочу спрашивать.
0
0 / 0 / 1
Регистрация: 21.11.2015
Сообщений: 217
10.03.2016, 19:45  [ТС] 5
вот задание
1. На основе класса, созданного в работе №1, разработать класс, содержащий дополнительно к имеющимся полей и функций:
- Поле, имеет такой же тип, как массив в таблице 1;
- Статическое поле такого же типа;
- Статическое функцию, которая возвращает по ссылке значение статического поля.
2. Изменить созданную в работе №1 функцию выделения памяти для массива так, чтобы в ней, кроме имеющихся действий, происходило увеличение на единицу значение статического поля.
3. Определить указатель на поля класса (для любого типа полей) и указатель на функции класса, имеют тип значения void и пустой список аргументов.

Добавлено через 5 минут
Цитата Сообщение от Sabnik18 Посмотреть сообщение
C++
1
static short int kol2;
но почему kol2? и без & ?

Добавлено через 31 секунду
там же адрес надо присвоить

Добавлено через 2 минуты
учитель говорил что взятие адреса правильно
C++
1
2
3
4
Sop::static meth()
{
return Sop::&kol2;
}
0
BrainOverflow
126 / 130 / 64
Регистрация: 31.03.2013
Сообщений: 556
10.03.2016, 19:46 6
Светлана Слонь, если хотите вернуть ссылку, тогда так:
C++
1
2
3
4
5
6
7
//....
static short int kol2;
//....
short int& Sop::meth()
{
    return kol2;
}
0
0 / 0 / 1
Регистрация: 21.11.2015
Сообщений: 217
10.03.2016, 19:48  [ТС] 7
а почему kol2???
нам же надо kol2 для arr2;

Добавлено через 34 секунды
а статическая kol3...
0
BrainOverflow
126 / 130 / 64
Регистрация: 31.03.2013
Сообщений: 556
10.03.2016, 19:48 8
Цитата Сообщение от Светлана Слонь Посмотреть сообщение
учитель говорил что взятие адреса правильно
во-первых, в область видимости Sop входит meth() и т.к. вы указали прототип с возвращаемым значением char, то нужно еще и тип указать, поэтому это вообще бред:
C++
1
2
3
4
Sop::static meth()
{
return Sop::&kol2;
}
Далее. У вас тип возвращаемого значения в прототипе char, но возвращает short int. Такое конечно возможно, но для чего?
0
18822 / 9826 / 2401
Регистрация: 30.01.2014
Сообщений: 17,260
10.03.2016, 19:49 9
Цитата Сообщение от Светлана Слонь Посмотреть сообщение
а почему kol2???
Смотрите на принцип, а не на имена переменных. Имена переменных, понимая принцип, сами сможете выбрать какие хотите.
0
0 / 0 / 1
Регистрация: 21.11.2015
Сообщений: 217
10.03.2016, 19:54  [ТС] 10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
class Sop
{
private:
short int kol;
short int kol2;
char *arr;
char *arr2;
static char *arr3;
static short int kol3;
public:
void pol();
void vvod();
void vivod();
static char meth();
};
 char Sop:: meth()
{
return kol3;
}
Добавлено через 21 секунду
тогда так?

Добавлено через 37 секунд
ой....

Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
class Sop
{
private:
short int kol;
short int kol2;
char *arr;
char *arr2;
static char *arr3;
static short int kol3;
public:
void pol();
void vvod();
void vivod();
static char meth();
};
short int& Sop::meth()
{
    return kol3;
}
0
BrainOverflow
126 / 130 / 64
Регистрация: 31.03.2013
Сообщений: 556
10.03.2016, 19:55 11
Светлана Слонь, вы до этого возвращали kol2, теперь kol3. ????
Цитата Сообщение от Светлана Слонь Посмотреть сообщение
C++
1
2
3
4
5
6
7
//.....
static char meth();
};
short int& Sop::meth()
{
    return kol3;
}
Вы сами то видите, что у вас прототип возвращает char??????????
0
0 / 0 / 1
Регистрация: 21.11.2015
Сообщений: 217
10.03.2016, 20:24  [ТС] 12
но выдает ошибку на 16 и 18 строке(

Добавлено через 1 минуту
но ведь kol3 принадлежит статическому массиву

Добавлено через 1 минуту
в задании так же - Статическую функцию, которая возвращает по ссылке значение статического поля.

Добавлено через 1 минуту
kol2 принадлежит arr2

Добавлено через 2 минуты
тогда
C++
1
static int meth();
Добавлено через 5 минут
все равно выдает ошибку на 16 и 18 строке((((((((((((((((((((((((((

Добавлено через 16 минут
0
10.03.2016, 20:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.03.2016, 20:24
Помогаю со студенческими работами здесь

Статический элемент и метод класса
Доброго времени суток, разбираюсь со статическим элементом и методом класса. накидал небольшую...

CreateThread: возможно ли запустить не статический метод класса?
Возможно ли в CreateThread запустить не static процедуру класса? clas_s obj; HANDLE h =...

Полиморфизм. Как в предке объявить статический массив, который можно будет использовать в наследниках?
Всем привет. Мне необходимо в классе предке объявить статический массив который можно будет...

Как передать в метод класса Menu указатель на метод дочернего класса?
Как передать в метод базового класса указатель на метод дочернего: class Menu() { protected: ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru