C++要点笔记(21)——引用(reference)

Reference可以看做是一个变量的别名:

int x;
int& foo = x;

Reference的一个重要用途是用在函数传参中:

int workWithClass( const MyClass& a_class_object )
{
}

在上述函数中,因为参数是引用,所以省去了copy参数的工作;并且由于有const修饰,所以不会对参数所指向的对象进行修改。

一旦reference绑定了一个object,它不能再绑定其它的object(参考stackoverflow)。

Polymorphisms works both for pointers and references:

class instrument {
public:
    virtual void play(){}
};

class drum : public instrument {
public:
    virtual void play() override{
        std::cout << "dum, dum" << std::endl;
    }
};

class piano : public instrument {
public:
    virtual void play() override{
        std::cout << "pling" << std::endl;
    }
};

int main (){
    instrument i;
    piano p;
    drum d;

    instrument &pi = i;
    pi.play();  // -

    instrument &pp = p;
    pp.play();  // pling

    instrument &pd = d;
    pd.play();  // dum, dum
}

输出:

pling                                                                                                                              
dum, dum 

参考资料:
C++ References

 

Haskell笔记 (9)—— typeclass

Typeclass顾名思义:typeclass,类型的分类,同Java中的interface类似。参看下例:

> :t (==)
(==) :: Eq a => a -> a -> Bool

=>之前的Eq a表示:atypeEqtypeclassaEq的一个实例。

参考资料:
Typeclasses 101
Why sum x y is of type (Num a) => a -> a -> a in Haskell?
Explain Type Classes in Haskell