Es ist einfacher, es im Code zu erklären:Warum Konstruktoren, die mithilfe von Deklarationen generiert werden, dieselben Zugriffsebenen für die Basisklassen haben?
class A {
protected:
A(int i) {}
void foo() {}
};
class B : public A {
public:
B() : A(0) {}
using A::A;
using A::foo;
};
int main()
{
B b1;
// [protected] A::foo => [public] B::foo
b1.foo(); // Ok
// [protected] A::A(int) => [protected] B::B(int)
B b2(0); // cannot access protected member
}
habe ich versucht, den Code in VS2015. Ich konnte die Zugriffsebenen von Elementfunktionen mit Deklarationen ändern, während ich das bei Konstruktoren nicht tun konnte. Das ist komisch für mich. Hat jemand eine Idee, warum sie so arbeiten?
Ich weiß immer noch nicht, warum sie es auf diese Weise entwerfen, aber danke für die Informationen. Ich meine, ich kann die Zugriffsebenen immer noch ändern, indem ich Konstruktoren in den Ebenen definiere, die ich in abgeleiteten Klassen haben möchte. Konstruktoren die gleichen Zugriffsebenen wie Basen zu geben, macht es nur weniger nützlich. –