Вопрос о синтаксисе c ++: класс для метода - PullRequest
0 голосов
/ 10 июня 2011

в приведенном ниже коде имеет следующую строку

 base_list(const base_list &tmp) :memory::SqlAlloc()

base_list - это метод, память - это пространство имен, SqlAlloc - это класс, так что это значит, когда объединяет их вместе?

class base_list :public memory::SqlAlloc
{
public:
  base_list(const base_list &tmp) :memory::SqlAlloc()
  {
    elements= tmp.elements;
    first= tmp.first;
    last= elements ? tmp.last : &first;
  }

Ответы [ 5 ]

3 голосов
/ 10 июня 2011
base_list(const base_list &tmp) :memory::SqlAlloc() 

Использует Initializer list для вызова конструктора класса SqlAlloc внутри пространства имен memory.

Для получения дополнительной информации о преимуществах использования Initializer List в C ++ см. this .

2 голосов
/ 10 июня 2011

Он вызывает конструктор по умолчанию базового класса memory::SqlAlloc().

namespace memory {

class SqlAlloc
{
public:
    SqlAlloc() {} // SqlAlloc's default constructor
};

}

//...

class base_list : public memory::SqlAlloc
{
public:
  // base_list constructor
  base_list(const base_list &tmp) : memory::SqlAlloc()
  {
   // The code after the ":" above and before the "{" brace
   // is the initializer list
    elements= tmp.elements;
    first= tmp.first;
    last= elements ? tmp.last : &first;
  };

. Учитывайте следующее:

int main()
{
    base_list bl; // instance of base_list called "bl" is declared.
}

Когда создается bl, он вызывает конструкторbase_list.Это приводит к запуску кода в списке инициализатора конструктора base_list.Этот список инициализаторов имеет memory::SqlAlloc(), который вызывает конструктор SqlAlloc по умолчанию.Когда конструктор SqlAlloc завершает работу, запускается конструктор base_list.

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

:memory::SqlAlloc() вызывает стандартный конструктор базового класса и как таковой здесь не требуется;

Синтаксис называется: (базовый) список инициализаторов, см. Также Разница между инициализатором и списком инициализаторов по умолчанию в c ++

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

base_list является конструктором, и он вызывает конструктор базового класса (SqlAlloc).

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

base_list наследуется от memory::SqlAlloc.

Строка, о которой вы спрашиваете, является конструктором копирования. : memory::SqlAlloc() после является инициализатором базового класса. Он вызывает конструктор базового класса.

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