c++笔记

1.

构造函数

不管子类有没有定义构造函数时,都会默认调用父类的构造函数

拷贝构造函数

如果子类没有定义拷贝构造,那么会默认调用父类的

如果子类定义了拷贝构造,那么不会默认调用父类,必须自己显式调用


这也就是为什么如果子类自己定义了拷贝构造函数,即使继承自 boost::noncopyable,仍然可以拷贝的道理了

以下代码编译OK

class B: boost::noncopyable
{
public:
    B(){}
    B(const B&){
    }
};
int main()
{
    B b;
    B b2(b);
    return 0;
}

2.

模板一般定义要放在头文件里,否则编译错误

其实模板也可以声明在h里,实现在cpp里,但是前提是在cpp里要实现化它

比如,在h里声明template<class T> void func(T&);

cpp里:

template<class T> void func(T&){}

template void func(int &);

以后客户使用h的时候就不会报错

注:

或者写一个模板特化

template<> void func(int&){}

你可能感兴趣的:(c++笔记)