我知道在C ++中,您在C#等语言中使用->
或::
代替.
来访问对象的值,例如: button->Text
或System::String^
,但我不知道何时我应该使用->
或::
,这会让我非常沮丧许多编译器错误。如果你能提供帮助,我将非常感激。谢谢:))
答案 0 :(得分:10)
->
是您访问指针变量的成员时。 EG:myclass *m = new myclass(); m->myfunc();
在指向myfunc()
的指针上调用myclass
。 ::
是范围运算符。这是为了显示某些范围。如果myclass
位于命名空间foo
中,那么您可以编写foo::myclass mc;
答案 1 :(得分:4)
->
如果您有指向某个对象的指针,这只是取消引用该指针并访问其属性的快捷方式。
pointerToObject->member
与(*pointerToObject).member
::
用于从某个范围访问内容 - 它仅适用于名称空间和类/结构范围。
namespace MyNamespace {
typedef int MyInt;
}
MyNamespace::MyInt variable;
答案 2 :(得分:4)
与您的问题所述相反,您 在C ++中使用.
。很多。
.
(与非指针一起用于访问成员和方法)
std::string hello = "Hello";
if (hello.length() > 3) { ... }
->
(用于访问成员和方法的指针)
MyClass *myObject = new MyClass;
if (myObject->property)
myObject->method();
::
(范围解决方案)
void MyClass::method() { ... } //Define method outside of class body
MyClass::static_property; //access static properties / methods
::
也用于名称空间解析(请参阅第一个示例std::string
,string
位于名称空间std
中。)
答案 3 :(得分:3)
我尝试展示::
,.
和->
的一些用法示例。我希望它有所帮助:
int g;
namespace test
{
struct Test
{
int x;
static void func();
};
void Test:: func() {
int g = ::g;
}
}
int main() {
test::Test v;
test::Test *p = &v;
v.x = 1;
v.func();
p->x = 2;
p->func();
test::Test::func();
}
答案 4 :(得分:2)
Opertor - >当左操作数是指针时应用。考虑例如
struct A
{
int a, b;
A( int a, int b ) : a( a ), b( this->a * b ) {}
};
Operator ::引用右操作数所属的类或空间。例如
int a;
strunt A
{
int a;
A( int a ) { A::a = a + ::a; }
};
使用句点然后左操作数是对象的左值。例如
struct A
{
int x;
int y;
};
A *a = new A;
a->x = 10;
( *a ).y = 20;