4

例えば:

class Derived : public Base
{
    Derived(const Base &rhs)
    {
        // Is this a copy constructor?
    }
    const Derived &operator=(const Base &rhs)
    {
        // Is this a copy assignment operator?
    }
};
  1. 示されているコンストラクターはコピー コンストラクターとしてカウントされますか?
  2. 示されている代入演算子は、コピー代入演算子としてカウントされますか?
4

1 に答える 1

8

示されているコンストラクターはコピー コンストラクターとしてカウントされますか?

いいえ。コピー コンストラクターとしてカウントされませ。 これは単なる変換コンストラクターであり、コピー コンストラクターではありません。

C++03 標準クラス オブジェクトのコピー パラ 2:

class の非テンプレート コンストラクターは、最初のパラメーターの型が 、、またはであり、他のパラメーターがないか、他のすべてのパラメーターに既定の引数があるX場合、コピー コンストラクターです。X&const X&volatile X&const volatile X&


示されている代入演算子は、コピー代入演算子としてカウントされますか?

いいえ、そうではありません。

C++03 標準 12.8 クラス オブジェクトのコピー パラ 9:

ユーザー宣言のコピー代入演算子は、型、、、またはのパラメーターを 1 つだけ持つX::operator=class の非静的非テンプレート メンバー関数です。XXX&const X&volatile X&const volatile X&


オンライン サンプル:

#include<iostream>
class Base{};
class Derived : public Base
{
   public:
    Derived(){}
    Derived(const Base &rhs)
    {
       std::cout<<"\n In conversion constructor";
    }
    const Derived &operator=(const Base &rhs)
    {
        std::cout<<"\n In operator=";
        return *this;
    }
};

void doSomething(Derived obj)
{
    std::cout<<"\n In doSomething";
}
int main()
{
    Base obj1;
    doSomething(obj1);


    Derived obj2;
    obj2 = obj1;    
    return 0;
}

出力:

In conversion constructor
In doSomething
In operator=
于 2013-02-17T07:03:05.893 に答える