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

Как инициализировать статические члены класса

16.03.2016, 19:22. Просмотров 305. Ответов 9
Метки нет (Все метки)

Помогите пожалуйста....я не знаю как вывести в статическое поле значения(((
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 <conio.h> 
#include <stdlib.h> 
#include <iostream> 
using namespace std; 
class Object 
{ 
private: 
string *str; 
static string *str3;
char b; 
 static char m;
public: 
int data;
static int kol; 
void setdata(int data){cout<<"data = ";cin>>data; 
}; 
static void setdata2(int kol){cout<<"kol = ";cin>>kol; 
}; 
void setstr(char bukvu) {b=bukvu; str=new string[data]; } ;
static void setstr2(char bukvu2) {m=bukvu2; str3=new string[kol]; } ; 
void showstr() 
{ 
for (int i = 0; i < data; i++) 
{ 
cout<<"Vvedite ekementu \n";cin>>b; 
str[i]=b; 
cout << endl;} 
} 
static void showstr2() 
{ 
for (int i = 0; i < kol; i++) 
{ 
cout<<"Vvedite ekementu \n";cin>>m; 
str3[i]=m; 
cout << endl;} 
} 
void outstr(){cout<<"Ctroka = "; for (int i=0;i<data;i++) 
{cout<<str[i];}
} 
static void outstr2(){cout<<"Ctroka = "; for (int i=0;i<kol;i++) 
{cout<<str3[i];}
} 
 
}; 
int main() 
{ Object Lp; 
cout <<"vvedite kolichestvo bukv\n"; cin>> Lp.data; 
Lp.setstr(Lp.data); 
Lp.showstr(); 
Lp.outstr(); 
Lp.setstr2(Lp.kol); 
Lp.showstr2(); 
Lp.outstr2(); 
getch(); 
return 0; 
}
выдает ошибки(((
намудрила ужас чего( не понимаю статик(((
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.03.2016, 19:22
Ответы с готовыми решениями:

Как правильно инициализировать статические члены класса?
Я новичок и заранее прошу прощение за тупые вопросы. Имеются два класса:...

Как инициализировать члены класса, являющегося параметром шаблона
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; template...

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

Статические члены класса
Добрый день. Проходили тему - статические члены класса. Написали программу,...

Статические массивы, члены класса
необходимо создать статический массив. компилятор gcc #include&lt;iostream&gt;...

9
zss
Модератор
Эксперт С++
7179 / 6678 / 4226
Регистрация: 18.12.2011
Сообщений: 17,622
Завершенные тесты: 1
16.03.2016, 19:44 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <string>
...
class Object 
{
....
}; 
 
int Object::kol=0;
char Object::m=' ';
string* Object::str3=NULL;
 
int main()
Смею заметить, что Ваш класс очень недоброкачественный.
При наличии выделения динамической памяти, нет деструктора ее удаляющего.
В целом не соблюдено правило трех (В классе обязательно должны быть копиконструктор, operator=, деструктор).
Распространенные ошибки
0
Светлана Слонь
0 / 0 / 1
Регистрация: 21.11.2015
Сообщений: 213
16.03.2016, 19:50  [ТС] 3
Объясните программу
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;
 
class s
{
public:
    static void (s::*IO_p) ();\\????функция на указатель???
private:
    void IO(void)  {cout<<"hello"<<endl;   };
};
 
void (s::*s::IO_p) ()=&s::IO;\\????что это означает?
 
int main(void)
{
    s primer;
    (primer.*s::IO_p)();
    return 0;
}
0
Светлана Слонь
0 / 0 / 1
Регистрация: 21.11.2015
Сообщений: 213
16.03.2016, 20:03  [ТС] 4
C++
1
2
3
4
5
6
7
8
9
class sop
{
public:
    static void (sop::*IO_p) ();\\а что это означает?
private:
    void IO(void)  {cout<<"Good job"<<endl;   };
};
 
void (sop::*sop::IO_p) ()=&sop::IO;\\???? и это?
0
zss
Модератор
Эксперт С++
7179 / 6678 / 4226
Регистрация: 18.12.2011
Сообщений: 17,622
Завершенные тесты: 1
16.03.2016, 20:30 5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
using namespace std;
 
class s
{
public:
    static void (s::*IO_p)();//IO_p - это адрес функции
 
    void IO1(void)  {cout<<"hello1"<<endl;   };
    void IO2(void)  {cout<<"hello2"<<endl;   };
};
 
void (s::*s::IO_p)()=&s::IO1;// Инициализируем IO_p адресом функции IO1 
 
int main(void)
{
    s primer;
    (primer.*s::IO_p)(); // вызов IO1
    s::IO_p=&s::IO2;   // Присваиваем IO_p адрес функции IO2
    (primer.*s::IO_p)(); // вызов IO2
    return 0;
}
Только и я не понимаю, почему пришлось писать так кучеряво.
1
Светлана Слонь
0 / 0 / 1
Регистрация: 21.11.2015
Сообщений: 213
16.03.2016, 20:52  [ТС] 6
ага спасибо)))
ну мне надо использовать статическую функцию(((
я статик вообще не понимаю....
так хотя бы выводит

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
#include <iostream>
using namespace std;
 
 
class s
{
public:
    static void (s::*IO_p) ();
   void pol();
void vvod();
void vivod();
private:
    char *arr;
    static short int kol;
    void IO(void)  {cout<<"HELLO, USER!!!"<<endl;   };
};
 
void (s::*s::IO_p) ()=&s::IO;
void s::pol()
{
cout<<"Vvedite razmer massiva: ";
cin>>kol;
arr = new char[kol];
 
return;
}
void s::vvod()
{
cout<<"Vvedite dannie: \n";
for(int i = 0; i < kol; i++)
{
  cout <<"A["<<i+1<<"] = ";
  cin >> arr[i];
}
}
void s::vivod()
{       
cout << "Massiv: \n";
for(int i = 0; i < kol; i++)   
  cout <<"A["<<i+1<<"] = "<<arr[i]<<";\n";
}
int main(void)
{
    s p;
    (p.*s::IO_p)();
  p.pol();
  p.vvod();
   p.vivod();
    return 0;
}
мне нужно 13 пунктов сделать для этого статика(((

Добавлено через 5 минут
нам задание дали такое
не трогая объект сделать указатель на статическую функцию

Добавлено через 6 минут
а как сделать статическую функцию , которая возвращает по ссылке значение статического поля?
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4608 / 2422 / 674
Регистрация: 18.10.2014
Сообщений: 4,134
16.03.2016, 20:55 7
Цитата Сообщение от Светлана Слонь Посмотреть сообщение
C++
1
static void (sop::*IO_p) ();\\а что это означает?
Объявление статического члена IO_p класса sop, имеющего тип void (sop::*)(). Т.е. sop::IO_p - это у нас будет указатель на функцию-член (метод) класса sop. Указывать он может на какой-то метод, не имеющий параметров и возвращающий void.

Цитата Сообщение от Светлана Слонь Посмотреть сообщение
C++
1
void (sop::*sop::IO_p) ()=&sop::IO;\\???? и это?
А это - определение того же статического члена sop::IO_p. В определении указан инициализатор &sop::IO, то есть изначально указатель sop::IO_p будет указывать на метод void sop::IO()
0
Светлана Слонь
0 / 0 / 1
Регистрация: 21.11.2015
Сообщений: 213
16.03.2016, 21:00  [ТС] 8
спасибо)))

Добавлено через 2 минуты
как сделать статическую функцию , которая возвращает по ссылке значение статического поля?
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4608 / 2422 / 674
Регистрация: 18.10.2014
Сообщений: 4,134
16.03.2016, 21:11 9
Цитата Сообщение от Светлана Слонь Посмотреть сообщение
как сделать статическую функцию , которая возвращает по ссылке значение статического поля?
Элементарно

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class Class
{
public:
   static int i;
   static int &func() { return i; };
};
 
int Class::i = 42;
 
int main()
{
   std::cout << Class::func() << std::endl;
}
1
Светлана Слонь
0 / 0 / 1
Регистрация: 21.11.2015
Сообщений: 213
16.03.2016, 22:03  [ТС] 10
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
#include <iostream>
using namespace std;
 
 
 
class s
{
public:
    static void (s::*IO_p) ();
   void pol();
void vvod();
void vivod();
static int i;
   static int &func() { return i; };\\ а что потом дописывать?
private:
    char *arr;
    static short int kol;
    void IO(void)  {cout<<"HELLO, USER!!!"<<endl;   };
};
 
void (s::*s::IO_p) ()=&s::IO;
void s::pol()
{
cout<<"Vvedite razmer massiva: ";
cin>>kol;
arr = new char[kol];
 
return;
}
void s::vvod()
{
cout<<"Vvedite dannie: \n";
for(int i = 0; i < kol; i++)
{
  cout <<"A["<<i+1<<"] = ";
  cin >> arr[i];
}
}
void s::vivod()
{       
cout << "Massiv: \n";
for(int i = 0; i < kol; i++)   
  cout <<"A["<<i+1<<"] = "<<arr[i]<<";\n";
}
int main(void)
{
    s p;
    (p.*s::IO_p)();
  p.pol();
  p.vvod();
   p.vivod();
    return 0;
}
а что еще дописать надо?

Добавлено через 11 минут
ааааа...все...до меня дошло

Добавлено через 14 минут
спасибо огромное)))
0
16.03.2016, 22:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.03.2016, 22:03

Где инициализировать члены класса CTreeCtrl?
В диалоговом окне, например, оконные члены класса инициализируются в...

Конструктор класса, содержащего только статические члены
Практикуюсь по книге Стенли Липпмана &quot;Язык программирования C++ вводный курс&quot; 4...

Класс MyString через статические члены класса
Всем доброго времени суток. Возникла необходимость решить задачу, хочу...


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

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

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