Передача абстрактных классов...257

We use cookies. Read the Privacy and Cookie Policy

Поскольку вы не можете реализовать абстрактный класс, упоминание о возможности создавать указатели на абстрактные классы звучит несколько странно. Однако если вспомнить о полиморфизме, то станет ясно, что это не так уж глупо, как кажется поначалу. Рассмотрим следующий фрагмент кода:

    void fn( Account *pAccount ) ; /* Это допустимо */

    void otherFn( )

    {

        Savings s ;

        Checking c ;

        /* Savings ЯВЛЯЕТСЯ Account */

        fn( &s ) ;

        /* Checking — тоже */

        fn( &c ) ;

    }

В этом примере pAccount объявлен как указатель на Account. Разумеется, при вызове функции ей будет передаваться адрес какого-то объекта неабстрактного класса, например Checking или Savings.

Все объекты, полученные функцией fn( ), будут объектами либо класса Checking, либо Savings ( или другого неабстрактного подкласса Account ). Можно с уверенностью заявить, что вы никогда не передадите этой функции объект класса Account, поскольку никогда не сможете создать объект этого класса.