一个c ++语法问题:方法的类

时间:2011-06-10 06:59:53

标签: c++ namespaces

在下面的代码中,它有以下行

 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 个答案:

答案 0 :(得分:3)

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

使用Initializer list在名称空间SqlAlloc内调用类memory的构造函数。

有关在C ++中使用Initializer List的优点的详细信息,请参阅this

答案 1 :(得分:2)

它调用基类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的构造函数。

答案 2 :(得分:1)

base_list是构造函数,它调用基类的构造函数(SqlAlloc)。

答案 3 :(得分:1)

:memory::SqlAlloc()调用基类默认构造函数,因此这里不需要;

语法称为:(基本)初始化列表,另请参阅Difference between initializer and default initializer list in c++

答案 4 :(得分:0)

base_list继承自memory::SqlAlloc

您询问的行是复制构造函数。 : memory::SqlAlloc() after是基类初始值设定项。它调用基类的构造函数。