このコードの出力結果は "BASE!"になります。この例では、派生クラスのコピー機能が呼び出されなかったのはなぜですか。彼らには同じ署名があり、私の推論では派生したものが呼び出されるべきです。何が問題ですか?コピーコンストラクタの仮想ヘルパ関数が呼び出されない
#include <iostream>
using namespace std;
class Base{
virtual void copy(const Base&b){
cout<<"BASE!";
}
public:
Base()=default;
Base(const Base&b){
copy(b);
}
};
class Derived: public Base{
void copy(const Base&b) override{
cout<<"DERIVED";
}
};
int main() {
Derived d;
Derived b(d);
return 0;
}
あなたは基本 –
の可能性のある二重にコピーメソッドを作成する必要があります(https://stackoverflow.com/questions/962132/calling-virtual-functions-inside-constructors)の – HolyBlackCat
可能な複製を[コンストラクタ内の仮想関数を呼び出します] [コンストラクタから仮想関数と純粋仮想関数を呼び出す](https://stackoverflow.com/questions/8642363/invoking-virtual-function-and-pure-virtual-function-from-a-constructor) –