2011-06-10 76 views
0

,它具有以下行一个C++的语法问题:类下面的代码方法

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; 
    } 

回答

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

用途Initializer list调用SqlAlloc类的构造函数中的命名空间memory

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

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的构造函数。

1

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

0

base_list继承。

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