这是来自MSDN的.NET Framework中对象类的示例。
using namespace System;
// The Point class is derived from System.Object.
ref class Point
{
public:
int x;
public:
int y;
public:
Point(int x, int y)
{
this->x = x;
this->y = y;
}
public:
virtual bool Equals(Object^ obj) override
{
// If this and obj do not refer to the same type,
// then they are not equal.
if (obj->GetType() != this->GetType())
{
return false;
}
// Return true if x and y fields match.
Point^ other = (Point^) obj;
return (this->x == other->x) && (this->y == other->y);
}
// Return the XOR of the x and y fields.
public:
virtual int GetHashCode() override
{
return x ^ y;
}
// Return the point's value as a string.
public:
virtual String^ ToString() override
{
return String::Format("({0}, {1})", x, y);
}
// Return a copy of this point object by making a simple
// field copy.
public:
Point^ Copy()
{
return (Point^) this->MemberwiseClone();
}
};
int main()
{
// Construct a Point object.
Point^ p1 = gcnew Point(1, 2);
// Make another Point object that is a copy of the first.
Point^ p2 = p1->Copy();
// Make another variable that references the first
// Point object.
Point^ p3 = p1;
// The line below displays false because p1 and
// p2 refer to two different objects.
Console::WriteLine(
Object::ReferenceEquals(p1, p2));
// The line below displays true because p1 and p2 refer
// to two different objects that have the same value.
Console::WriteLine(Object::Equals(p1, p2));
// The line below displays true because p1 and
// p3 refer to one object.
Console::WriteLine(Object::ReferenceEquals(p1, p3));
// The line below displays: p1's value is: (1, 2)
Console::WriteLine("p1's value is: {0}", p1->ToString());
}
// This code produces the following output.
//
// False
// True
// True
// p1's value is: (1, 2)
我不明白为什么在^
之后使用Point
运算符。
有人请解释。
答案 0 :(得分:3)
这是C ++ / CLI,而不仅仅是普通的C ++。
^
基本上是普通*
的.NET等价物,但它定义了句柄,而不是指针。句柄可以为空,就像指针一样。
因此Point^
是Point
类实例的句柄。
答案 1 :(得分:1)
^
运算符是托管C ++创建句柄的方式。见here
答案 2 :(得分:1)
这是C ++ / CLI,以前称为托管C ++代码,您可以在其中混合标准C ++并使用.Net库。
^
hat运算符将变量声明为Garbage Collected Handle,而不是标准C样式指针*
或C ++引用&
。