0
//V4.cpp
#include <iostream>
using namespace std;
class V3 {
private:
double x, y, z;
public:
V3(double a, double b, double c): x(a), y(b), z(c) {
cout << "V3(double, double, double)" << endl;
}
V3(const V3 &a): x(a.x), y(a.y), z(a.z) {
cout << "V3(const V3 &)" << endl;
}
};
class V4 {
private:
V3 xyz;
double time;
public:
V4(V3 a, double t): xyz(a), time(t) {
cout << "V4(V3, double)" << endl;
}
};
int main(void)
{
V3 xyz(1.0, 2.0, 3.0);
double t(4.0);
V4 xyzt(xyz, t);
return 0;
}
クラスV4には別のクラスV3があり、V3のオブジェクトはV3の存在オブジェクトによって初期化されるため、V4のコンストラクタはV3のコピーコンストラクタを呼び出します。コピーコンストラクタは一度呼び出されますが、結果はそれがtiwceと呼ばれていることを示しています、それはなぜですか?なぜオブジェクトがC++の別のオブジェクトに含まれているときにコピーコンストラクタが2回呼び出されるのですか?
コードのコンパイル:
g++ V4.cpp -o V4 -Wall
をして実行します。
./V4
と結果:
V3(double, double, double)
V3(const V3 &)
V3(const V3 &)
V4(V3, double)
をので、その結果を見て、なぜV3のコピーコンストラクタが2回呼び出され? 私のOSはLubuntu16.04で、g ++は5.4.0です
私はちょうどあなたのコードを試してきた、とコピーコンストラクタが一度呼ばれた、ありがとうございました! – fagdih
@fagdih:ようこそ。自分の問題を解決した場合は、投票ボタンの横にある緑色のチェックマークをクリックして、「受け入れ済みの回答をマークする」ことを忘れないでください。 –
:私は初心者です、答えを受け入れる方法は? – fagdih