什么是“operator int”函数?

时间:2010-09-28 16:18:03

标签: c++ terminology conversion-operator

下面的“operator int”功能是什么?它做了什么?

class INT
{
   int a;

public:
   INT(int ix = 0)
   {
      a = ix;
   }

   /* Starting here: */
   operator int()
   {
      return a;
   }
   /* End */

   INT operator ++(int)
   {
      return a++;
   }
};

5 个答案:

答案 0 :(得分:26)

粗体代码是转换运算符。 (AKA cast operator

它为您提供了一种从自定义INT类型转换为其他类型(在本例中为int)的方法,而无需明确调用特殊转换函数。

例如,使用convert运算符,此代码将编译:

INT i(1234);
int i_2 = i; // this will implicitly call INT::operator int()

如果没有转换运算符,上面的代码将无法编译,您必须执行其他操作才能从INT转到int,例如:

INT i(1234);
int i_2 = i.a;  // this wont compile because a is private

答案 1 :(得分:16)

operator int()是一个转化运算符,它允许使用此类代替int。如果在期望int(或其他数字类型)的地方使用此类型的对象,则此代码将用于获取正确类型的值。

例如:

int i(1);
INT I(2); // Initialised with constructor; I.a == 2
i = I;    // I is converted to an int using `operator int()`, returning 2.

答案 2 :(得分:4)

看起来它使INT类的行为与常规int类似,只是还没有定义其他一些运算符。

这是作业问题吗?

答案 3 :(得分:4)

首先要做的事情:

  

$ 12.3.1 / 1 - “声明了一个构造函数   没有函数说明符   explicit指定从的转换   它的参数类型   它的类的类型。这样的构造函数   被称为转换构造函数。“

在您的示例中,INT是一个User Defined类,它具有来自'int'的转换构造函数。

因此,以下代码格式正确:

INT i(1024);     // direct initialization syntax

这意味着您可以从整数中获取INT对象。但是,如果必须将INT对象转换回整数,那会怎么做?及物?

可以说类INT可以提供成员函数来返回封装的整数成员

int x = i.geta();

然而,这不是非常直观,也不是标准化的方法。当涉及到内置类型在这种情况下如何工作时,它也不直观。

int z = 0;
int y1 = z; // copy initialization or
int y2(z);  // direct initialization
double d = (int )z; // explicit cast

因此,标准允许通过以下方式转换用户定义类型的标准化和直观性:

  

$ 12.3 / 2 - “a。的成员函数   类X没有参数a   表格的名称[...]

     

运营商conversion-type-id

     

[...]指定从X到。的转换   由...指定的类型   转换型-ID。这样的功能是   称为转换函数。没有回报   类型可以指定。如果转换   函数是一个成员函数,   转换函数的类型   (8.3.5)是“没有功能   参数返回   转换型-ID”。

这使得以下所有格式良好且与内置类型的工作方式保持一致

int y1 = i; // copy initialization or
int y2(i);  // direct initialization
double d = (int )i; // explicit cast

答案 4 :(得分:2)

好像这是教室里的一个问题,所以我邀请你查看有关如何创建课程的文档。

class Foo
{
public
    Foo() {} // Constructor

    Foo operator++ {} // Operation ++ on foo like:
    // Foo foo;
    // foo++;
};