The arrow operator in C++
What the arrow operator auctally does to struct pointers and class pointers. And implement our own arrow operator and see how they work. If we don’t use the arrow operator,we will get code like this:
#include <iostream>
#include <string>
class Entity
{
public:
void Print()const { std::cout << "hello!" << std::endl; }
private:
};
int main()
{
Entity e;
e.Print();
Entity* ptr = &e;
Entity& entity = *ptr;
(*ptr).Print();
}
It means if we want to call the Print function in class Entity from the Entity prointer, we need to dereference the prointer first, it looks kind of clumsy, so what we can do instead is using the arrow operator.
ptr->Print();
overload -> operator in our own class
#include <iostream>
#include <string>
class Entity
{
public:
void Print()const { std::cout << "hello!" << std::endl; }
int x;
private:
};
class ScopedPtr
{
public:
ScopedPtr(Entity* entity)
: m_Obj(entity)
{
}
~ScopedPtr()
{
delete m_Obj;
}
Entity* operator->()
{
return m_Obj;
}
private:
Entity* m_Obj;
};
int main()
{
ScopedPtr entity = new Entity();
entity->Print();
std::cin.get();
}
get the offset of a member variable in memory
#include #include
struct Vector3 { float x, y, z; };
int main() { int offset = (int)&((Vector3*)nullptr)->x; //start at zero to get the certian offset! std::cout << offset << std::endl;
std::cin.get();
}
|