С++ - язык, который изучается постепенно.Полиморфные указываемые объекты
                   Справочники Всё для создания сайта

Ссылки


Home
Бизнес
Справочники
Советы







Материалы книги получены с http://www.itlibitum.ru/

Полиморфные указываемые объекты

В базовом варианте ведущего указателя присутствует переменная с типом Pointee*. Нo кто сказал, что объект, на который она ссылается, должен быть настоящим Pointee, а не каким-нибудь классом, производным от Pointee?

// В файле Foo.h

class Foo {

protected:

Foo();

public:

// Члены Foo

};

class Pfoo { // Ведущий указатель

private:

Foo* foo;

public:

PFoo();

Foo* operator->() const { return foo; }

// Остальные члены, характерные для ведущих указателей

};

// В файле Foo.cpp

class DerivedFromFoo : public Foo {

private:

// Закрытые члены производного класса

public:

DerivedFromFoo(); // Функция открытая, но спрятанная в файле .cpp

// Переопределения функций класса Foo

};

PFoo::PFoo() : foo(new DrivedFromFoo)

{

}

Ловкость рук и никакого мошенничества! Ведущий указатель подсунул вместо Foo нечто совершенно иное, а клиенты ничего не замечают. Ага! Теперь вы понимаете, почему конструктор Foo объявлялся защищенным, а не закрытым! Класс PFoo уже можно не объявлять другом; доступ к конструкторам Foo нужен только конструктору DerivedFromFoo.

В части 3 мы поговорим о том, какое наследование нужно, чтобы эта схема работала (а именно, чтобы все классы, производные от Foo, имели тот же открытый интерфейс, что и сам Foo). А пока продолжим изучение указателей и всего, что с ними связано.


Назад    Содержание    Далее    

Home  Создание сайтов  Учебник по записи CD  Справочник Web дизайнера Самоучитель IE PHP и MySQL Компьютерные сети С++ E-mail me

Copyright 2007. Климов Александр. All Right Reserved.
Hosted by uCoz