Cpp。 NET:“a-> Methodname”vs“a.MethodName”

时间:2009-11-03 17:55:40

标签: c++-cli

我想知道这两者之间的区别(抱歉,我不知道这个主题的名称)。

我来自C#,我习惯于编写System.data以及classA.MethodA。我已经发现在Cpp中,使用名称空间我需要使用::,with classmembers - >。但是简单的“。”呢? 我创建了System :: data:odbc :: odbcConnection ^ connection。后来我能够使用connection.Open。为什么不连接 - >打开?

对不起,我确信它在网上很容易找到,但我不知道这些的英文术语。 谢谢你们

4 个答案:

答案 0 :(得分:4)

如果您有指向对象的指针,请使用:

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

另一方面,如果您有一个实际的对象,则使用点分表示法:

MyClass a;
a.MethodName();

答案 1 :(得分: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

答案 2 :(得分:0)

简短回答:C ++允许您管理自己的记忆。因此,您可以通过使用指针(基本上是包含内存地址的整数变量,而不是值)来创建和操作内存。
a.Method()表示a的实例,您可以从中调用Method
a->Method()表示a指向类实例的指针,您可以从中调用Method

答案 3 :(得分:0)

当您使用类似a->成员的语法时,您正在使用指向结构或对象的指针。 当您使用类似a.member的语法时,您使用的是结构或对象,而不是指向结构或对象的指针。

我为你做了一个快速谷歌,THIS看起来相当快速和正确的解释。