【c++】查缺补漏

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的私有成员
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值