Effective C++——Study Notes

1.p3  区分声明declaration和定义definition,定义式是编译器为对象拨发内存的地点。区分定义和初始化,初始化是给予对象初值的过程。默认构造函数要不没有参数,要不所有参数都有缺省值。

2.p5 explicit关键字用来阻止构造函数执行隐式类型转换,但它们仍然可进行显示类型转换。比如int(38.0)

class B
{
public:
	explict B(int x=0;bool b=true);
	~B();
}
void foo(B bObj);
foo(B(28.0)); //correct
foo(28); //wrong,foo接受的是B类型而不是int类型

3. p6 copy constructor以及copy assignment区分赋值操作符与复制构造函数。

class Widget
{
	Widget();
	Widge(const Widge& rhs);
	Widget& operator=(const Widget& rhs);
	~Widge();
}
Widget w1; //default constructor
Widget w2(w1); //copy constructor
Widget w3 = w2; //copy constructor 而不是copy assignment
w2=w3;  //copy assignment
如果一个新对象被定义,一定会有个构造函数被调用,不可能调用赋值操作,如果没有新对象被定义,就不会有构造函数被调用,当然就是赋值操作符被调用。

4.STL,标准模板库是C++标准程序库的一部分,致力于容器,迭代器,算法及相关机能。许多相关机能以函数对象(function object)实现,那是“行为像函数”的对象。这样的对象来自于重载operator()(function call操作符)的class。回顾function object是经类实例化的对象,使用类封装函数功能。

5.不明确行为,undefined behavior。比如下面的两个例子。

int *p=0; //p是空指针

std::cout<<*p; //会导致不明确行为

char name[]="Darla"; //name是个数组,大小是6

char c=name[10]; //导致不明确行为

6.C++中的interface是指class的可访问元素或者函数的签名即函数原型。回顾interface inheritance和implementation inheritance,前者指派生类仅仅继承类的接口。


你可能感兴趣的:(C++)