考虑以下示例代码:
#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 &)
呢?
prog.cpp:18:5: error: deleted function 'derived::derived(const derived&)' prog.cpp:27:16: error: used here
。 - Cornstalks