Dire che abbiamo questo codicePerché il cast di stile C ti consente di convertire in una classe base privata?
class A {
public:
A() : x(1) {}
virtual ~A() {}
int x;
};
class B {
public:
B() : y(2) {}
virtual ~B() {}
void g()
{
cout << "B::" << y << endl;
}
int y;
};
class C : private A, private B {
public:
void f()
{
B* p = static_cast<B*>(this);
p->g();
}
};
int main()
{
C c;
((B*)&c)->g();
return 0;
}
Il cast stile C nella funzione principale non può essere espresso correttamente in termini di C++ calchi (static_cast
, dynamic_cast
, reinterpret_cast
). Ma qual è la ragione per consentire questo in primo luogo? Non fa male l'incapsulamento?
UPDATE Questo non è un duplicato della domanda legato, perché questa questione è di circa decisioni di progettazione in C++. Non chiede cosa posso o non posso fare con la lingua, mi chiede perché certe decisioni potrebbero essere state prese.
Poiché i cast in stile C sono troppo potenti e non dovrebbero mai essere utilizzati, ecco perché. –
@CatPlusPlus, questo è esattamente il mio punto, perché ricevono così tanto potere? – unkulunkulu
@unkulunkulu perché questo è C++. –