2014-10-14 2 views
-2

У меня проблемы с пониманием приведенного ниже кода. Я искал с помощью Google, но я не мог найти ответ.функция вызова из статического указателя на другой класс внутри класса

class B 
{ 
    //constructor etc 
    //...some stuff 
    virtual myinit(); 
    virtual doStuff(); 
}; 


class A : public B 
{ 
    //constructor etc 
    //...some stuff 

    static B * Create() 
    { 
     A* demo = new A; 
     demo->myinit(); 
     demo->doStuff(); 
     return demo; 
    } 
}; 

Я знаю, что когда я создаю A, B создается тоже. Но почему Create() возвращает указатель на тип B?

Этот метод называется автоматически? Кроме того, почему это static таким образом? Я знаю, что такое полиморфизм и статические средства.

+0

Проблема непонятна. – user966379

+0

Исправить семантический ошибка –

ответ

0

why does Create() return a pointer to a type B?

Вы можете безопасно преобразовать указатель производного класса указателю базового класса.

Почему функция делает это, вам нужно будет спросить того, кто ее написал.

Is this method called automatically?

No.

why is it static in this way?

Так что вы можете вызвать функцию без объекта класса. Если A еще не существует и Create не были статичными, вы не смогли бы создать никаких A с помощью функции Create.

0

Статический метод означает, что этот метод существует для каждого класса, а не для объекта, поэтому его привязка к классу. Статический метод Create() - это хорошо известный шаблон (Factory Pattern).

В этом методе создается объект, который указывает на A, методы вызываются и возвращаются.

0

Этих вопросов прикоснуться к основным концепциям

1- С ++ полиморфизма 2- статической семантическими на переменных, не являющихся члены.

Для полиморфизма я советую вам прочитать введение здесь (http://www.cplusplus.com/doc/tutorial/polymorphism/)

Для статичной, вы должны знать, что статическая функция-член может быть использован без создания экземпляра класса.

+0

Неправильный вид статического. –

+0

отредактировал, он изменил код – adev

Смежные вопросы