46箭头运算符(操作符) in C++
在想调用一个对象里的Print()
函数时,可以直接用对象名.Print()
但如果是只有指向这个对象的指针呢?如下
class Entity
{
public:
void Print() {
std::cout << "Hello" << std::endl;
}
};
int main()
{
Entity e;
e.Print();
Entity *ptr = &e;
(*ptr).Print(); //太麻烦了
ptr->Print(); //简便许多
return 0;
}
上面就是90%的情况下使用箭头运算符的方式了
然而,作为一个运算符,C++实际上可以重载它,并在你自己的自定义类中使用它
比如下面我想在NewPtr
类中使用Entity
类里的函数就会很麻烦,但是可以通过重载箭头运算符来实现简便操作
class Entity
{
public:
void Print() {
std::cout << "Hello" << std::endl;
}
};
class NewPtr
{
public:
Entity *ptr;
NewPtr(Entity *e)
: ptr(e) {}
//重载 -> 使对象表现为指针
Entity *operator->()
{
return ptr;
}
};
int main()
{
NewPtr e = new NewPtr();
e->Print(); //合理的,正确的,简洁的
return 0;
}
关于这里的重载后面应当会有讲
然而后面不讲重载,这里只能依靠C++Primer了