的形式 - >僅僅是用於解refrencing指針和訪問構件的簡寫。
(*ptr).field;
// Equiv to
ptr->field;
一個很好的理由使用 - >是,當你在下面的鏈條:
int x = (*(*(*(*ptr).field1).field2).field3).field4;
// Equiv to
int y = ptr->field1->field2->field3->field4;
第二個變得更具有可讀性。
至於你的問題的第二部分。
我覺得很簡單,只是一個例子。
#include <iostream>
class Shape
{
public: virtual ~Shape() {}
virtual void Print() {std::cout << "Shape\n";}
};
class Point: public Shape
{
public: virtual void Print() {std::cout << "Point\n";}
};
int main()
{
Point p;
Shape* s = &p;
s->Print();
(*s).Print();
}
> vi x.cpp
> g++ x.cpp
> ./a.exe
Point
Point
正如你所看到的結果在兩種情況下都是一樣的。
當您通過指針或引用調用方法時,將調用虛擬調用機制。星運算符(AKA derefence運算符)返回一個對象的引用(它實際上不引用對象)。所以當它用於調用方法時,將調用虛擬調用機制並調用該方法的最派生版本。
你是指'(* ptr).field'還是'* ptr.field'?如果你確實是指'* ptr。那麼這兩種形式完全沒有共同之處,這使得這個問題變得毫無意義。 – AnT 2009-12-28 20:24:25
我的意思是(* ptr).field – aharon 2009-12-28 20:39:24
從您的編輯:答案將是相同的。見下文。 – 2009-12-28 20:57:17