000
18.08.2008, 13:34 Uhr
banshee
|
Also sofern ich das mit friend-Klassen richtig verstanden habe, kann man da ja folgendes mit machen:
Code: |
class A { void bla() { geheim(); } }
class B { friend class A;
private: void geheim() { //... } }
int main() { A foo; foo.bla(); }
|
und dann wird geheim() aus der Klasse B ausgeführt.
Ich hab in einem Code aber folgendes entdeckt:
RESOURCE.H
Code: |
template<typename T> class Manager;
template<typename T> class Resource { friend class Manager<T>;
public: unsigned int getTimestamp() const { return timestamp; } }
|
MANAGER.H
Code: |
template<typename T> class Manager { T* find(const std::string& filename) const { typedef stdext::hash_multimap<std::string, T*> mapType; std::pair<mapType::const_iterator, mapType::const_iterator> range = items.equal_range(filename);
for(mapType::const_iterator i = range.first; i != range.second; ++i) { i->second->getTimestamp(); // <---------- } } }
|
Offensichtlich wird die Methode getTimestamp() aus der Klasse Resource in der resource.h aufgerufen, aber wieso auf i->second, weil das ist ja ein Objekt vom Typ T* und woher weiß ich denn, dass dieses eine Methode getTimestamp() hat? |