2009-11-03 13 views
3

我想知道這兩者之間的區別(對不起,我不知道這個主題的名字)。Cpp。 NET:「a-> Methodname」vs「a.MethodName」

我來自C#,我用它來編寫System.data和classA.MethodA。我已經發現在Cpp中,我需要使用::和classmembers - >命名空間。但簡單的「。」呢? 我已經創建了System :: data:odbc :: odbcConnection ^連接。後來我能夠使用connection.Open。爲什麼不連接 - >打開?

對不起,我相信它的東西很容易在網上找到,但我不知道這些英文術語。 謝謝你們

回答

4

如果你有一個指向對象,請使用:

MyClass *a = new MyClass(); 
a->MethodName(); 

在另一方面,如果你有一個實際的對象,你用點號:

MyClass a; 
a.MethodName(); 
+0

它值得一提的是C++/CLI「句柄」的用法,因爲這個問題特別提到了這個問題。 – 2009-11-03 18:02:59

0

簡短的回答:C++允許你管理你自己的內存。因此,您可以通過使用指針(實質上是包含內存地址的整數變量,而不是一個值)來創建和操作內存。
a.Method()表示a是的一個實例,您可以從中調用Method
a->Method()意味着a指向一個類的實例,您可以從中呼叫Method

0

當您使用類似a-> member的語法時,您正在使用指向結構或對象的指針。 當您使用類似a.member的語法時,您正在使用結構或對象,而不是指向結構或對象的指針。

我爲你做了一個快速谷歌和THIS看起來相當快速和體面的解釋。

2

爲了澄清以前的答案,VC++中的插入符^可以被認爲是*的大多數意圖和目的。它是一個類的「處理」,意味着略有不同,但類似。見這短短的谷歌搜索的解釋:

http://blogs.msdn.com/branbray/archive/2003/11/17/51016.aspx

所以,在你的例子還有,如果你初始化你的連接,如:

System::Data::Odbc::OdbcConnection connect; 
//You should be able to do this: 
connect.Open(); 

相反,如果你這樣做:

System::Data::Odbc::OdbcConnection^ connect1 = gcnew System::Data::Odbc::OdbcConnection(); 
connect1.Open(); // should be an error 
connect1->Open(); //correct 
+0

關於堆棧溢出的插入符號也有很好的討論: http://stackoverflow.com/questions/202463/what-does-the-caret-mean-in-c-cli – Rooke 2009-11-03 18:43:21