С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
djoni-kga
4 / 4 / 0
Регистрация: 11.11.2008
Сообщений: 66
#1

Доступ из статической функции к не стачисеским переменным - C++

03.05.2011, 14:46. Просмотров 845. Ответов 7
Метки нет (Все метки)

Добрый день!

Имеется класс со статической функцией, как получить доступ, из это функции к не статичным переменным. Что то типа этого:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class MyClass
{
public:
  int Val1;
  int Val2;
  static void Test();
};
 
void MyCalss::Test()
{
  Val1++;
  Val2++;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.05.2011, 14:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Доступ из статической функции к не стачисеским переменным (C++):

Friend функции не имеют доступ к закрытым переменным - C++
Всем привет. Изучаю c++ по Липпману 5-ое издание. Там на стр. 351-352 используются friend функции для получения доступа к закрытым...

Объявление статической переменной и статической функции в классе - C++
Добрый вечер, столкнулся с проблемой и не могу решить. Есть класс SavingsAccount и в нем объявлена статическая переменная для процентной...

Доступ к статической переменной-члену - C++
Всем доброго время суток задали написать программу, в которой доступ к статической переменной-члену осуществляется с помощью статической...

Доступ к переменным - C++
Есть иерархия классов: class base{ int a; }; class der : private base{ void f(){ //Необходимо использовать переменную...

Прямой доступ к переменным - C++
Доброго времени суток, форумчане. Сразу оговорю, что название темы может не совсем корректно раскрывать суть вопроса. Начну с аналога...

Доступ к переменным класса - C++
Давным давно помню была такая фишка в сях, когда приходилось много раз писать конструкцию типа "VarName->member()" можно было заключить это...

7
ValeryLaptev
Эксперт С++
1046 / 825 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
03.05.2011, 14:48 #2
Пока не создано ни одного объекта, полей не существует.
0
djoni-kga
4 / 4 / 0
Регистрация: 11.11.2008
Сообщений: 66
03.05.2011, 16:37  [ТС] #3
на самом деле это класс диалогового окна. Там есть статическая функция, её вызывает контрол CListCtrl по событию, вот от туда надо добраться до переменный, класса.
0
ValeryLaptev
Эксперт С++
1046 / 825 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
03.05.2011, 16:44 #4
Статический метод можно вызывать для класса и для объекта:
C++
1
2
TClass::method();
object.metod()
Смотря, что требуется.
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
03.05.2011, 16:56 #5
ValeryLaptev, Ну да. Вот только this статическая функция все же не принимает следовательно достать парамы анриал, кроме передачи объекта/указателя в параметрах.
0
djoni-kga
4 / 4 / 0
Регистрация: 11.11.2008
Сообщений: 66
03.05.2011, 17:05  [ТС] #6
хорошо, а можно примерчик
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
03.05.2011, 17:09 #7
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>
 
struct SomeClass
{
     static void some_function(SomeClass* pOb);
     int val1;
     int val2;
};
 
void SomeClass::some_function(SomeClass* pOb)
{
    ++pOb->val1;
    ++pOb->val2;
}
 
int main()
{
    SomeClass* Object = new SomeClass;
    std::cout << Object->val1 << ' ' << Object->val2 << '\n';
    SomeClass::some_function(Object);
    std::cout << Object->val1 << ' ' << Object->val2 << '\n';
}
0
djoni-kga
4 / 4 / 0
Регистрация: 11.11.2008
Сообщений: 66
03.05.2011, 17:16  [ТС] #8
спасибо за пример, а такой вариант сойдет?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
typedef BOOL (*MYCALLBACK)(LPVOID lpParameter);
class CMygDlg : public CDialog
{
public:
  int m_Count;  // переменная до которой надо добраться
  void SetCallBack(MYCALLBACK pFun, LPVOID lpParameter)
  static BOOL TestCallBack(LPVOID lpParameter); // функция которую вызывает CListCtrl по событию
};
 
BOOL CMygDlg::OnInitDialog()
{
  SetCallBack(&CMygDlg::TestCallBack, (LPVOID)this);
}
 
BOOL CMygDlg::TestCallBack(LPVOID lpParameter)
{
  CMygDlg* pThis = static_cast<CMygDlg*>(lpParameter);
 
  // как добраться до переменной, так?
  pThis->m_Count++;
}
Добавлено через 55 секунд
все действия в диалоговом окне.
0
03.05.2011, 17:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.05.2011, 17:16
Привет! Вот еще темы с ответами:

Доступ к переменным базового класса при наследовании - C++
Есть следующий код class Base { protected: int x; Base* enemy; public: Base() {}

Доступ к переменным в DLL программе из внешних програм - C++
Подскажите пожалуйста, как реализовать Записать данные из программы №1 в программу DLL и считать данные из DLL программой №2 По...

Обращение к статической функции класса - C++
Всем привет! есть Number.h: using namespace std; #pragma once class Number { public: Number(void);

Локальная переменная внутри статической функции - C++
Всем доброго дня! Из данного примера выяснилось, что при обьявлении функции func_1() статической, переменная x внутри этой ...


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

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

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