0

私は簡単なコードを書きます.私の質問は: なぜ item_base は単に constrcut 関数を呼び出すのですか? item_base は「コピー構造関数」を呼び出す必要がありますか?関数を構築する」.違いは何ですか?

class Item_base {
    public:
        Item_base();
        Item_base(int);
        Item_base(const Item_base &base);
        void operator=(const Item_base &item);
        virtual ~Item_base();
};

Item_base::Item_base()
{
    cout << "construct function" << endl;
}

Item_base::Item_base(int a)
{
    cout << "arg construct function" << endl;
}
Item_base::Item_base(const Item_base &base)
{
    cout << "copy function" << endl;
}

void Item_base::operator=(const Item_base &item)
{
    cout << "= operator" << endl;
}

Item_base::~Item_base()
{
}


int main()
{
    //cout << "Hello world!" << endl;
    Item_base item_base = Item_base(1);//construct function
    Item_base item_base2 = item_base;//copy construct  function
    Item_base item_base3;
    item_base3 = item_base2;// =operator function
    return 0;
}
4

5 に答える 5

0

コピー コンストラクターは、既存のオブジェクトを使用して新しいオブジェクトの作成を処理しますが、代入演算子は 2 つの既存のオブジェクト間で機能します。つまり、1 つのオブジェクトの値を別のオブジェクトに割り当てるだけです。

例:(コンストラクターのコピー)

Item_base ib1;
Item_base ib2 = ib1; or Item_base ib2(ib1);

例:(代入演算子)

Item_base ib1;
Item_base ib2
ib1=ib2;
于 2013-06-26T09:46:28.840 に答える
0

コピーコンストラクターは、既に作成されているオブジェクトを作成中の別のNEWオブジェクトにCOPYするときに呼び出されます。呼び出しは暗黙的です。

Item_base z;
Item_base x = z; //Copying `z` into `x`

代入演算子は、明示的な代入に使用されます。構築中とは限りません。

Item_base y;
y = x;
于 2013-06-26T09:32:14.590 に答える
0

完全に明確にするために、コピーコンストラクターは両方に対して呼び出されます

Item_base a2 = a1;

Item_base a2(a1);

代入演算子も呼び出されません。

于 2013-06-26T09:32:57.797 に答える
0

item_base は、オブジェクトが既に構築されているため、コピー コンストラクターを使用しません。を割り当てるだけitem_base3で、再作成しません。

于 2013-06-26T09:29:42.243 に答える