2

我有一个类 SimpleCircle。其声明如下:

class SimpleCircle
{
  public:
SimpleCircle();
SimpleCircle(int rad);
SimpleCircle(const SimpleCircle&);
~SimpleCircle();

   SimpleCircle operator++(int);
}

关于我使用的定义:

SimpleCircle SimpleCircle::operator++(int)
{
    SimpleCircle temp(*this);
    ++itsRadius;
    return temp;
}

当我使用

SimpleCircle temp(*this)

,是调用了复制构造函数还是什么?那里发生了什么?我没有像这样的构造函数

SimpleCircle(SimpleCircle newCircle)

或其他东西(除了复制构造函数)

4

2 回答 2

8

这确实调用了复制构造函数。虽然您没有SimpleCircle(SimpleCircle other)定义构造函数,但您已经SimpleCircle(const SimpleCircle&)定义了。该表达式*this可以很容易地映射到该构造函数,因此它就是这里正在执行的内容。

于 2012-04-09T16:58:38.943 回答
0

当然你有一个复制构造函数:就是这样SimpleCircle(const SimpleCircle&);

它可能不接受 aSimpleCircle作为参数,但它接受一个常量引用,这是复制构造函数所需要的。该*this参数返回一个指向调用对象的指针,复制构造函数使用该指针进行 make temp

于 2012-04-09T16:59:59.947 回答