1 动态分配数组初始化:
string *ps=new string[10];//类类型,默认构造函数初始化
int *pi=new int[10]();//()用于初始化
对于动态分配数组,其元素只能初始化为元素类型默认值。
C++允许定义0长度的动态分配数组,即:
char *cp=new char[0]; //ok,返回有效的非零指针,但不能解引用
2 动态空间的释放
delete [] ps; //[]必不可少
3 const对象初始化规则:
指向const对象的指针可以初始化为指向非const对象的指针;反之则不可以;
但是const对象和非const对象则可以相互初始化;
非const引用只能用引用所指向的非const对象的副本来初始化,而const引用还可以初始化为右值或字符串常量值。
4 形参是局部对象,也是自动对象
5 构造函数:与类同名,没有返回类型,可在类内或类外定义,但是声明必须在类内(红色部分和普通成员函数一样)
默认构造函数没有形参
Eg:
class Sales_item
{
public:
double avg_price()const;
bool same_isbn(constSales_item &rhs) const
{return isbn==rhs.isbn;}
Sales_item():units_sold(0),revenue(0.0) {} //构造函数
private:
string isbn;
unsigned units_sold;
double revenue;
}
其中构造函数Sales_item():units_sold(0),revenue(0.0) {}形参和函数体均为空,冒号和花括号之间的代码为构造函数的初始化列表,它为类的一个或多个数据成员指定初值,以冒号开头;string 类型的对象可以自动默认为空,也可以指定其初值,在这里isbn
被初始化为空。
递归方法求反转链表:
struct List
{
int data;
List* next;
};
List* ReverseList(List* oldList,List* newHead=NULL)
{
List* next=oldList->next;
oldList->next=newHead;
newHead=oldList;
return (next==NULL) ? newHead :ReverseList(next,newHead);
}