Introduction
1)declarations and definition
extern int x; // object declaration
int x; // object definition

2)默認構造函數,要么沒有參數,要么制定參數的初始值,否則定義類的數組的時候會出錯。

class A
{
public:
A(); // default constructor
};
A arrayA[10]; // 10 constructors called


class B
{
public:
B(int x = 0); // default constructor
};

B arrayB[10]; // 10 constructors called,
// each with an arg of 0

class C
{
public:
C(int x); // not a default constructor
};
C arrayC[10]; // error!


對無法直接聲明為數組對象的類,則需要使用指針數組。
C *ptrArray[10]; // no constructors called

ptrArray[0] = new C(22); // allocate and construct
// 1 C object
ptrArray[1] = new C(4); // ditto


3)copy constructor 主要用于值傳遞的類

class String
{
public:
String(); // default constructor
String(const String& rhs); // copy constructor

private:
char *data;
};
String s1; // call default constructor
String s2(s1); // call copy constructor
String s3 = s2; // call copy constructor

4)initialization 與 assignment
string s1; // initialization
string s2("Hello"); // initialization
string s3 = s2; // initialization
s1 = s3; // assignment

前者是在構造函數中,后者是利用賦值操作符”=”,實際就是調用的函數不同。前者注重數據的合法性,而后者注重數據內存的管理。
// a possible String constructor
String::String(const char *value)


{

if (value)
{ // if value ptr isn't null
data = new char[strlen(value) + 1];
strcpy(data,value);
}

else
{ // handle null value ptr3
data = new char[1];
*data = '\0'; // add trailing null char
}
}
// a possible String assignment operator
String& String::operator=(const String& rhs)


{
if (this == &rhs)
return *this; // see Item 17

delete [] data; // delete old memory
data = // allocate new memory
new char[strlen(rhs.data) + 1];
strcpy(data, rhs.data);

return *this; // see Item 15
}


5)幾種表達方式
1,const_cast is designed to cast away the constness of objects and pointers, a topic I examine in Item 21.
2,dynamic_cast is used to perform "safe downcasting," a subject we'll explore in Item 39.
3,reinterpret_cast is engineered for casts that yield implementation-dependent results, e.g., casting between function pointer types. (You're not likely to need reinterpret_cast very often. I don't use it at all in this book.)
4,static_cast is sort of the catch-all cast. It's what you use when none of the other casts is appropriate. It's the closest in meaning to the conventional C-style casts.