离光曦的博客

小小书童,可笑可笑

【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的私有成员
}
阅读更多
版权声明:help yourself. https://blog.csdn.net/guwuchangtian/article/details/79493371
想对作者说点什么? 我来说一句

c++基本知识点汇总

2015年06月04日 3.46MB 下载

计算机网络复习题

2012年04月17日 132KB 下载

查缺补漏之Redis

未完待续

Just_Fight_ Just_Fight_

2018-05-10 16:04:32

阅读数:11

数据结构c++

2015年12月01日 1.9MB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭