class A {
public:
A(void) { cout << "A::A" << endl; }
A(const A& a) { cout << "A::A(a)" << endl; }
virtual ~A(void) { cout << "A::~A" << endl; }
virtual void g(void) { cout << "A::g" << endl; }
};
class B : public A {
public:
B(void) { cout << "B::B" << endl; }
~B(void) { cout << "B::~B" << endl; }
void g(void){ cout << "B::g" << endl; }
};
void print(A c) {
cout << "print" << endl;
}
int main(void) {
A a;
B b;
A* c = &b;
c->g();
print(*c);
return 0;
}
は
私は理解していないと私はプログラムの開発のどの部分が、メソッドの印刷が所属んにはかなりわからないんだけど?なぜ、いつオーバーロードコンストラクタが実行されますか?この文<code>A::A(a)</code>取得者が実行する理由<code>c->g()</code>または</p> <p><code>print(*c);</code>を呼び出すときに
'print'はメソッドではなく、自由な関数です。それは 'main'と同じ" part "に属します。このプログラムで 'c-> g()'を呼び出すと "A :: A(a)"は表示されません。 '' A :: A(a) ''は文ではありません。 – molbdnilo
あなたの' print'は値によって引数を取るので、コピーを作る必要があります。 –
値を 'print'関数に渡しています。その結果、コピーコンストラクタ 'A :: A(const&A)'が呼び出されます。 – Vishal