次のコード例を検討してください。
#include <iostream>
class base {
public:
base() {
std::cout << "base constructed" << std::endl;
}
base(const base & source) {
std::cout << "base copy-constructed" << std::endl;
}
};
class derived : public base {
public:
derived() {
std::cout << "derived constructed" << std::endl;
}
derived(const derived &) = delete;
derived(const base & source) : base(source) {
std::cout << "derived copy-constructed from base" << std::endl;
}
};
int main() {
derived a;
base b(a);
derived c(a);
return 0;
}
base::base(const base &)
への呼び出しは問題ないのに、への呼び出しは問題があるのはなぜderived::derived(const base &)
ですか? どちらも基本参照を期待しており、派生参照が与えられています。派生は「ベース」であることは私の理解です。
派生型のオブジェクトへの参照が提供された場合にderived::derived(const derived &)
使用に問題がないのに、コンパイラが使用を主張するのはなぜですか?base::base(const base &)