c++中new操作的返回值:
new返回一个指针,如int *p=new int;返回一个指向int的指针,int *p=new int[10],返回一个指向含有10个int元素的数组的首地址。
new失败的操作:
在早期c++版本中,如果系统不能够满足用户new的内存需求,则继承c语言的处理方法,返回一个指向NULL的指针;后来c++的版本中,则是跑出bad_alloc异常,所以针对两种情况有三种处理方法:
① 老版本:
int *p=new int[100000000]
if(p==NULL){
//失败处理
}
②新版本:
int *p;
try {
p=new int[100000000];
}catch(const std::bad_alloc& e){
//异常处理
}
③兼容版本:
int *p=new (std::nothrow)int[100000000];
if(p==NULL){
//失败处理
}
const在各个位置的作用
①const DATATYPE a=?;
DATATYPE类型的常量,const修饰数据类型DATATYPE,表示该修饰符的值不可修改。
②const DATATYPE *p;
一个常量指针,const修饰数据类型DATATYPE,表示该指针p指向的DATATYPE类型数据不可修改。
③DATATYPE const *p;
与②相同。
④DATATYPE* const p=a pointer;
一个指针常量,const修饰指针*,表示该指针是一个常量,它的值不能改变,也就是说它只能指向同一个地方,不能指向其他地方。
⑤const DATATYPE *const p=a pointer;
②和④的组合,表示一个常量指针常量,这种表示方法p的值不能修改,即只能指向一个位置,p指向的东西也不能修改。
⑥const int *functionName(….)
const修饰函数返回值的数据类型int,表示函数返回的指针指向的内容不能改变。
⑦const int *functionName(…)const;
函数名后有const的这种形式比较特殊,函数常量,只能出现在类中
第一个const修饰返回值得int,表示返回的指针指向的内容不能改变;第二个const修饰函数名,表示const成员函数,这种修饰限制了该函数的访问权限,它只有读成员变量的权限,没有写权限。为什么要这样限制能,因为类可以实例化为一个常对象,常对象的值是不允许修改的(即常量),而常对象只能调用类的常量函数,所以常量函数不能修改类的内容,即不能有写权限。从另一个角度应该更好理解,类的get(获取成员)的方法,应该有const和非const两个版本,const版本是为const对象准备的,因为const对象只能访问const成员函数。
友元函数
类具有封装性,外部函数不能访问类的私有成员,如果需要访问类的私有成员,需要将函数在类内进行申明,格式较普通函数申明只是在前面加了friend关键字,友元函数不是类的成员函数,它只是一个普通的函数,但它可以访问类的私有变量,访问的类需要以引用的形式传递参数。
class foo{
public:
friend void bar(foo &a,foo &b,...);//类内申明bar为友元函数
//...other function
private:
//private element
};
void bar(foo &a,foo &b,...){
//函数定义,可以操作a,b的私有成员
}