#include <iostream>
using namespace std;
class Base
{
public:
Base(){cout <<"Base"<<endl;}
virtual ~Base(){cout<<"~Base"<<endl;}
virtual void foo(){ cout<<"foo base"<<endl;}
};
class Derived: private Base
{
public:
Derived(){cout<<"Derived"<<endl;}
virtual ~Derived(){cout<<"~Derived"<<endl;}
virtual void foo(){ cout<<"foo dervied"<<endl;}
};
int main(int argc, char *argv[])
{
Base *pb = new Derived;
Derived d;
d.foo();
return 0;
}
при выполнении вышеупомянутой программы-примера я получаю следующую ошибку:
protected.cpp: В функции «int main (int, char **)»:
protected.cpp: 26: ошибка: «База» - недоступная база «Производная»
Почему невозможно создать производный объект с базовым указателем ????
Так что я могу создать экземпляр класса Derived, например
Derived d
Derived d1= new Derived;
Но создание экземпляра из указателя базового класса, например
Base * b = new derived
потерпит неудачу.
Это потому, что Derived на самом деле не является производным классом от Base, если он является производным и закрытым.
Это правильно ?????