LINUX.ORG.RU

Доступ функции вне класса к членам класса.


0

0

К примеру есть функция f в ней вызывается функция void Class::f1(void), т.е. из функции вызов функции класса которому функция не принадлежит. Можно ли это как то осуществить.

И ещё есть функции которые используют другие функции т.е. к примеру

glutReshapeFunc(Resize);

но необходимо что бы Resize был членом класса опять же Resize не член оного, впринципе вопрос связан с предыдущим.

Заранее спасибо!!!

★★★★★

1)
class Class{
public:
static f1(){}
};

//...
void f(){
Class::f1();
}

2)
class Class{
public:
void f1();
};

void f(Class& c){
c.f1();
}


Flogger_d
()

Не понял вопроса: если f1 - public и объект существует, то какие проблемы вызвать откуда-то f1?

anonymous
()
Ответ на: комментарий от anonymous

если хочешь C++ изучить - читай Топп,Форд "Структуры данных в С++", там почти про всё.

а так - объявляешь эту функцию прямо внутри класса с ключевым словом friend

-- ckult --

anonymous
()

Вариант, когда на месте вызова уже известен экземпляр класса, метод которого надо вызвать, описан Flogger_d (18.11.2003 20:27:57).
Если же хоцца делать вызов, имея только ссылку на метод класса, такое тоже можно. В C++ для этого существуют адаптеры методов 
#include <functional>, см. mem_fun, mem_fun_ref
Принцип следующий:

class Server // класс, методы которого бум вызывать
{
public:
    int doIt(string);
    int doThat(string);
};

typedef int (Server::*Verb)(string); // указатель на функцию-член класса Server.

class Client // класс, который вызывает методы другого класса
{
private:
    Verb _do;
public:
    // _do будет указывать на разные методы Server, в зависимости от what
    Client(bool what) { do = what ? &Server::doIt : &Server::doThat; }
    // вызов _do, с передачей ссылки на экземпляр Server
    int Do(Server& target) { return (target.*_do)("made in Ulan-Ude"); }
};

loki
()
Ответ на: комментарий от loki

патч

Пардон, typo :)
- Client(bool what) { do = what ? &Server::doIt : &Server::doThat; }
+ Client(bool what) { _do = what ? &Server::doIt : &Server::doThat; }

loki
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.