Конструкторы наследования: преобразование из C # в C ++ - PullRequest
3 голосов
/ 05 октября 2011

Я пришел из C # фона, где я написал бы класс и конструктор, как это:

public class Grunt : GameObject
{
    public Grunt()
        : base()
    {
         // do stuff
    }
}

Как написать наследование конструкторов в C ++? И в шапке, и в источнике. Я знаю, что у вас нет ключевого слова base для работы, но в остальном синтаксис такой же?

Ответы [ 4 ]

6 голосов
/ 05 октября 2011
class Grunt : public GameObject
{
    Grunt()
        : GameObject()  // Since there are no parameters to the base, this line is actually optional.
    {
         // do stuff
    }
}

И настоятельно рекомендуем приобрести одну из прекрасных книг по С ++ по адресу Полное руководство и список книг по С ++

5 голосов
/ 05 октября 2011

Да, замените : base() на : GameObject().

Но если нет параметров, подразумевается вызов, как в C #

3 голосов
/ 05 октября 2011

Вы используете имя базового класса вместо ключевого слова base. Это необходимо из-за возможности множественного наследования в C ++. В случае нескольких базовых классов вы можете вызывать несколько базовых конструкторов, разделяя запятые в вызовах.

1 голос
/ 05 октября 2011

заголовок:

template <int unique>
class base { 
public: 
    base();
    base(int param);
};

class derived: public base<1>, public base<2> {
public:
    derived();
    derived(int param);
};

Источник:

base::base() 
{}

base::base(int param) 
{}

derived::derived() 
: base<1>()
, base<2>() 
{}

derived::derived(int param) 
: base<1>(param)
, base<2>(param) 
{}

Это разъясняет, как наследовать от нескольких классов, наследовать от шаблонных классов, конструировать базовые классы, показывает, как передавать параметры в базовые конструкторы, и показывает , почему мы должны использовать имя базы.

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