Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Вопрос по классам  (Прочитано 10950 раз)
0 Пользователей и 1 Гость смотрят эту тему.
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« : 31-08-2004 11:05 » 

Допустим есть какой-то класс Test.
у него есть паблик функция
Код:
int GetTotalNumber(CString varname);
Можно ли из другого класса добраться до этой функции, а конкретно получить возвращаемое ею значение ?

ЗЫ. чую, что какую то чушь спросил :oops:
« Последнее редактирование: 01-12-2007 12:51 от Алексей1153++ » Записан

MCP, MCAD, MCTS:Win, MCTS:Web
Serega
Гость
« Ответ #1 : 31-08-2004 11:28 » 

Конечно можно, нужно её вызвать Отлично
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


WWW
« Ответ #2 : 31-08-2004 11:37 » 

нет, почему чушь, можно

если не создавался экземпляр этого класса, то вызвать можно так:

Test::GetTotalNumber(...);

но в классе функцию надо объявить как static

Код:
class CTest 
{
public:
static int GetTotalNumber(CString varname);
};

Код:
#include "Test.h"

int CTest::GetTotalNumber(CString varname)
{
return 1;
}

Код:
#include "Test.h"

void CMyDlg::proc1()
{
int i = CTest::GetTotalNumber("rrr");
}
« Последнее редактирование: 01-12-2007 12:54 от Алексей1153++ » Записан

Pu
Большой босс

ru
Offline Offline
78


« Ответ #3 : 31-08-2004 11:48 » 

Алексей1153,  добавочка. static функция должна пользовать только static атрибуты класса, либо ей на вход дать указатель на объект класса. (Ну это и так ясно).   Вот такой я вот
Записан

Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать.
(с) Артур Джонс
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #4 : 31-08-2004 11:58 » 

Понятненько. А вот это что за мигня error C2593: 'operator =' is ambiguous ?
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
Serega
Гость
« Ответ #5 : 31-08-2004 12:05 » 

Код покажи
Записан
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #6 : 31-08-2004 12:08 » 

Делаю так :
Код:
class Test
{
    public :
        static void SetNumber(CString foo);
        static void GetNumber (CString foo2);
}
потом )
Код:
class Test2
{
    .....
     void Test2::Procseed()
     {
           Test::SetNumber("lalala");
           Test::GetNumber("blablabla");
     }
}

Так нельзя ?
« Последнее редактирование: 01-12-2007 12:57 от Алексей1153++ » Записан

MCP, MCAD, MCTS:Win, MCTS:Web
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #7 : 31-08-2004 12:10 » 

ругается так :
unresolved external symbol "public: static void __cdecl Test::SetNumber(class CString)" (?SetNumber@Test@SAXVCString@@@Z)
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #8 : 31-08-2004 12:14 » 

Прошу прощения, май мистэйк, забыл реализацию описать в классе Тест  :oops:
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #9 : 31-08-2004 12:33 » 

Если ещё не надоел...

Код:
class Test
{
    public :
        UINT NOMER;
        static void GetNumber (CString foo2);
//реализация функций
void GetNumber(str_number) //str_number = "1234"
{
    NOMER = (UINT)_ttoi(str_number);
}
}
вызывается функция тут :
Код:
class Test2
{
    .....
     void Test2::Procseed()
     {
           Test::GetNumber("blablabla");
     }
}

Получаю ошибку компиляции :
Код:
error C2597: illegal reference to data member 'Test::NUMBER' in a static member function
« Последнее редактирование: 01-12-2007 12:59 от Алексей1153++ » Записан

MCP, MCAD, MCTS:Win, MCTS:Web
Pu
Большой босс

ru
Offline Offline
78


« Ответ #10 : 31-08-2004 12:36 » 

UINT NOMER; - должен быть статик - смотри мой пост выше.
Записан

Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать.
(с) Артур Джонс
Pu
Большой босс

ru
Offline Offline
78


« Ответ #11 : 31-08-2004 12:41 » 

MOPO3, смысл в том что статик функции ты можешь вызвать без реально существующих объектов этого класса. Те обращаться к нестатик мемберам класса нельзя - их просто может не существовать на настоящий момент.
статик функции являются глобальными фунциями Улыбаюсь. НО имеют  смысл в контексте пространства имен своего класса.
Записан

Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать.
(с) Артур Джонс
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #12 : 31-08-2004 12:42 » 

Если делаю static UINT NOMER; , то получаю :
Код:
unresolved external symbol "public: static unsigned int TEST::NUMBER" (?NUMBER@Test@@2IA)
« Последнее редактирование: 01-12-2007 13:05 от Алексей1153++ » Записан

MCP, MCAD, MCTS:Win, MCTS:Web
Pu
Большой босс

ru
Offline Offline
78


« Ответ #13 : 31-08-2004 12:48 » 

примерчик реализации
Код:
class Test
{
    public :
        static UINT NOMER;
        static void GetNumber (CString foo2);
//реализация функций
};

в .cpp
UINT Test::NOMER = 0;
void Test::GetNumber(str_number) //str_number = "1234"
{
    NOMER = (UINT)_ttoi(str_number);
}

class Test2
{
    .....
     void Test2::Procseed()
     {
           Test::GetNumber("blablabla");
     }
}

или
Код:
class Test
{
    public :
        UINT NOMER;
        static void GetNumber (CString foo2, Test *t=0);
//реализация функций
};

в .cpp
void Test::GetNumber(CString foo2, Test *t) //str_number = "1234"
{
    if(t)
       t->NOMER = (UINT)_ttoi(foo2);
}

class Test2
{
    .....
     void Test2::Procseed()
     {
           Test::GetNumber("blablabla");
     }
}
в таком вот духе
« Последнее редактирование: 01-12-2007 13:07 от Алексей1153++ » Записан

Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать.
(с) Артур Джонс
Pu
Большой босс

ru
Offline Offline
78


« Ответ #14 : 31-08-2004 12:49 » 

MOPO3, на последний твой пост
в спп надо сделать так
UINT Test::NOMER = 0;
Записан

Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать.
(с) Артур Джонс
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #15 : 31-08-2004 13:21 » 

ОК, теперь работает. Спасибо всем огромное!
Иду дальше ковыряться.
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines