2009-11-03 24 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