Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Взаимодействие между обьектами через указатель

6.1K
04 мая 2008 года
Gfunk
42 / / 31.01.2006
У меня есть класс A.В котором определена функция function(char*,UINT,char*,UINT) как public.
Есть класс В,который не может быть наследован от А.Обьекту порожденному от класса В надо иметь доступ к function обьекта порожденного от класса А.
Я придумал сделать это через указатель на функцию:

class A
{
public:
A;//Это конструктор
void function (char*,UINT,char*,UINT);
void (*pfunction) (char*,UINT,char*,UINT);//Это указатель
};
A::A//Это конструктор
{
pfunction=&function;//<- ТУТ РУГАЕЦЦО
}

class B
{
public:
void (*pfunction) (char*,UINT,char*,UINT);//Это указатель
};

A ObjectA;
B ObjectB;

B.pfunction=A.pfunction;

Ну естественно не работает. :) В чем ошибка?
6.6K
05 мая 2008 года
Ordos
105 / / 02.11.2007
Да вы, батенька, извращенец!
Наверняка не так подходишь к решению задачи. Напиши, чего ты этим хочешь добиться.
6.1K
05 мая 2008 года
Gfunk
42 / / 31.01.2006
Я не извращенец я с ООП столкнулся недавно.
Поясняю что хочу сделать.Моя программа посылает и принимает данные от сервера(клиент).Я создал класс A в котором хранятся описания сокетов,поток который принимает данные,там же функция которая высылает данные.Обьект от этого класса должен быть один.
Кроме этого у меня есть много классов каждый из которых реализует определенную функцию(высылает определенные данные серверу).Этим классам нужно иметь доступ к функции SendData которая описана в классе A.
353
05 мая 2008 года
Nixus
840 / / 04.01.2007
Если хотим определить указатель на метод класса, а не статическую фукцию, то пишем так:
 
Код:
void (A::*pfunction) (char*, UINT, char*, UINT);

Но так делать все же не стоит. Лучше делать через абстрактные интерфейсы.
А судя по описанной тобой задаче, можно обойтись указателем на объект класса и простым методом даже не виртуальным, не говоря уже о указателях.
6.6K
05 мая 2008 года
Ordos
105 / / 02.11.2007
Если объект этого класса один, то это скорее всего класс со статическими метоами.
А зачем тебе в классе В метод-то. он у тебя в А есть
Вот в классе В у тебя будет метод Go

Ты его делаешь как
 
Код:
int Go(букафки)
{
//Чё-то делаем
А.SendData();//вызываем если SendData статический
//Чё-то делаем
}
 
Код:
int Go(букафки)
{
//Чё-то делаем
A a();
а.SendData();//вызываем если SendData не статический
//Чё-то делаем
}
3
05 мая 2008 года
Green
4.8K / / 20.01.2000
Цитата: Gfunk

Ну естественно не работает. :) В чем ошибка?


void (A::*pfunction) (char*,UINT,char*,UINT);//Это указатель

Только зачем тебе указатель? Используй виртуальные методы.

9
05 мая 2008 года
Lerkin
3.0K / / 25.03.2003
 
Код:
class A
{
public:
A;//Это конструктор
...
};
A::A//Это конструктор
{
pfunction=&function;//<- ТУТ РУГАЕЦЦО
}


А где выделенно - не ругаеццо?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог