Когда использовать указатель производного класса и указатель базового класса - PullRequest
1 голос
/ 16 июня 2011

Может ли кто-нибудь помочь мне, когда мне придется использовать базовый класс и указатель на класс dervied.

Ответы [ 4 ]

1 голос
/ 16 июня 2011

Это зависит от того, почему вы выводите.Если это для реализации ОО, большую часть времени вы будете использовать указатели на базовый класс (который будет часто абстрактным) исключительно;вы будете использовать указатели на производный класс, только если производный класс определяет расширенный интерфейс.Но наследование в C ++ - это техника, и она часто используется для других целей.(Подумайте о классе итераторов, который наследуется от экземпляра std::iterator. Это , а не OO, и вы никогда не будете использовать указатель на экземпляр std::iterator.)

Я буду часто проводить различие, используя «деривацию» для концепции ОО и «наследование» для техники C ++.Но это ни в коем случае не стандарт, и терминология сильно различается, поэтому вам, как правило, придется начинать с выяснения того, о чем говорит автор: разработка ОО или реализация C ++.И вы иногда в конечном итоге поймете, что он не знает себя;что он путает их в своем уме.Наследование - это языковая конструкция C ++, используемая для реализации OO-деривации, но эта языковая конструкция может использоваться для других целей.

0 голосов
/ 16 июня 2011

Указатели базового класса используются, когда у вас есть несколько производных классов, но вы хотите абстрагироваться от типа производного класса. Это может быть очень полезно, например, в таких ситуациях:

class Animal {
        Animal();
}

class Dog : public Animal {
        Dog();
}

class Cat : public Animal {
        Cat();
}

Как видите, в этом примере у вас есть базовый класс (Animal) и два производных класса (Cat и Dog). Скажем теперь, что вы управляете зоопарком (в котором есть только кошки и собаки :)), и вам нужно вести список своих животных. Вы можете просто создать два отдельных списка, один для кошек и другой для собак. Однако, если вы считаете, что кошки и собаки - это просто животные, вы можете создать список с указателями на животных.

Таким образом, абстрагируясь от типа производного класса, вы можете работать с различными производными классами, имея простой указатель на базовый класс.

Указатели на производные классы совершенно разные, поскольку они могут только "представлять" тип производного класса.

0 голосов
/ 16 июня 2011

Используйте указатель производного класса, когда вы хотите использовать интерфейс производного класса, или когда вы хотите убедиться, что имеете дело с этой конкретной реализацией базового класса, или когда вы хотите вызвать определенную не виртуальную функцию в производном классе.

При других обстоятельствах это не имеет значения.

0 голосов
/ 16 июня 2011

Когда у вас есть несколько производных классов. и вы не знаете во время компиляции, какой производный класс будет создан во время выполнения. указатель базового класса предпочтительнее указателя производного класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...