我的站点

一个系统软件工程师的随手涂鸦

Date: 一月 14, 2016

C++要点笔记(26)——构造函数(constructor)

构造函数(constructor)和类(class)名字相同,但要注意构造函数没有返回值(void也不行):

class A {
public:
    A();
private:
    int member;
};

A::A()
{
    member = 3;
}  

如果没有提供构造函数,C++会自动生成一个不带参数的默认构造函数(即default constructordefault constructor可以是没有参数或所有参数都有默认值) ,这个默认构造函数会调用类成员的默认构造函数初始化所有成员,但不会初始化primitive typecharint等等)。一旦提供了一个构造函数,C++就不会提供默认的不带参数的构造函数了,这点一定要注意。

可以用initialization list方式初始化类的成员:

class A {
public:
    A();
    void Output();
private:
    int member;
    int haha;
};

A::A():member(3), haha(8)
{
}

只能使用initialization list初始化的成员:

(1)constreference(可以参考SO上的这篇帖子):

Capture 当程序执行进入constructor代码时,整个object应该已经初始化完成了。 执行initialization list时,整个object还没有完全初始化完成。 因此constreference只能在initialization list中进行“初始化”,而不能在constructor中进行“赋值”。

Haskell笔记 (11)—— 函数的“type signature”

看一下take函数的type signature

ghci> :type take
take :: Int -> [a] -> [a]

这表明它有两个参数,返回值是一个list。“->”是右相关(right-associative),因此实际上也可以把take函数的type signature写成这样:

ghci> :type take
take :: Int -> ([a] -> [a])

因此也可以这样理解take函数:它有一个Int参数,返回值是另一个函数。这个函数的参数和返回类型是同一个类型的list

 

Powered by WordPress & Theme by Anders Norén