Это, конечно, мое частное мнение.
Это в его книгах я нашел объяснение что такое скрытое наследование классов - private inheritance:
class A {};
class B : private A {}
Я даже пробовал использовать применять эти знания на практике. И практика показала, что нужно быть проще. Тогда и программа понятней. Например, практикующий програмист не ожидает увидеть частное наследование в комерческой програме. А в спешке, еще и будет сходить с ума - почему это public переменная недоступна? Как, например, здесь:
#include <iostream>
using namespace std;
class A
{
public:
int x;
A() : x(0) {};
};
class B : private A
{
public:
B() : A() { x = 1; };
};
int main()
{
A a;
B b;
cout << "A a.x = " << a.x << endl;;
cout << "B b::a.x = " << b.x << endl;
return 0;
}
Компилятор "говорит":
error C2247: 'A::x' not accessible because 'B' uses 'private' to inherit from 'A'
И, конечно, Скотт Маерс показывает как это можно "победить":
#include <iostream>
using namespace std;
class A
{
public:
int x;
A() : x(0) {};
};
class B : private A
{
public:
using A::x;
B() : A() { x = 1; };
};
int main()
{
A a;
cout << "A a.x = " << a.x << endl;;
B b;
cout << "B b::a.x = " << b.x << endl;
B* pB = new B;
pB->x = 2;
cout << "B* pB->x = " << pB->x << endl;
delete pB;
return 0;
}
Я не знаю зачем это нужно. Но это существует. Кто знает, может и прогодится когда-нибудь.
No comments:
Post a Comment