我与C++的初识(二)

本文详细介绍了C++的一些关键特性,包括名字空间的定义与使用,如usingnamespacestd;string类型的字符串操作,如length()、concatenation和insert();函数形参的默认值设定;函数重载的概念及其应用;动态内存管理的new和delete操作;以及强制类型转换和异常处理的基本用法。通过实例展示了这些特性的实际运用。
摘要由CSDN通过智能技术生成

上一篇博客简单了解了C++的基本构成和常用符号,接下来了解C++的小特色。
目录:
1.名字空间。
2.字符串处理——string类型。
3.域解析符::。
4.形式参数可带有默认值。
5.函数重载。
6.动态内存空间管理。


1.名字空间
名字空间——namespace,是不是很熟悉,没错,using namespace std就是使用了C++自带的名字空间std。
除了库自带的名字空间,用户也可以自行定义和使用命名空间。
a、名字空间的定义:
    namespace      名称{...  ;   }注意大括号后不用加分号。

E.g:
    namespace one
    {
        int M=200;
        int inf=10;
    }
如上就成功定义了名字空间one。

b、名字空间的使用:
方法一:名字空间名称::局部内存名
方法二:using namespace 名字空间名称;
方法三:using 名字空间名称::局部内存名;

方法一是将某个名字空间内的局部内存名当作变量或常量使用,在此不多做解释,等下一起给出例子。
方法二直接使用某个名字空间内的所有量,使用后可在其他函数中直接此名字空间内的所有值。
方法三是单独使用一个名字空间内的某一个量。

E.g:

 

2.字符串类型string
首先,使用string类型必须包括头文件string,并且如果要输入带空格的串需要用getline(cin,s1)。
有了string类型后,不再需要关心内存如何分配,无需处理'\0'结束字符,这些操作将由系统处理。
下面列出一些常用的指令:
求字符串长度:length()    
E.g:

 

串联结:+
E.g:

 

插入:insert(n,"字符")    其中n表明将要插入在第n位后。
E.g:

 

替代:replace(n,x,"字符")    n表示第n位后,x表示替代几位,注意x可以和替代字符数不同。
E.g:

赋值:substr(n,x)n表示第n位后一位开始,x表示几个字符。
E.g:

 

删除:erase(n,x)n表示第n位后一位开始,x表示删除几个字符。
E.g:

 

 

比较字符串大小:关系运算符


3.域解析符::
域解析符就是两个冒号,作用是在局部变量和全局变量同时存在时调用全局变量,解决了重名问题。
E.g:

 


4.形参可带有默认值
其特点有:
a、实参给定顺序为从左至右,但是形参默认值给定顺序为从右至左。
b、给定默认值后,若调用时得到了实参,则以实参值优先。即没有给定实参时才使用默认值。
E.g:

 


注意:若默认值在原型中已经给出,则下面的函数定义不能再提供默认值。
E.g:

 


5.函数重载
在C语言中,同一作用域中函数名必须是唯一得,这就要求相似功能的函数必须拥有不同的函数名,而函数重载可以解决这个问题。

重载:对于功能完全相同或相似,只是在形参的个数、类型、顺序方面有区别的不同函数,可以用相同的函数来命名。
实际调用时,编译器通过匹配实参和形参来确定具体调用的函数。
E.g:

 


如上,对同一个函数进行重载,函数名相同,类型不同,编译器根据参数自动选择匹配函数。
关于函数重载,有以下几点需要注意:
1、重载函数必须拥有相同的函数名,但在形参个数、类型、顺序上至少有一个区别。
2、返回值不是区分重载函数的要素。
3、重载函数与带有默认值的函数一起使用时,可能造成二义性,使用时要注意参数个数。
E.g:int square(int x,int y=100)与int square(int x)
4、函数调用时,若给出的实参与形参不相符,将进行自动类型转换。


6.动态内存空间管理
申请动态内存空间——new:
申请1个int型动态内存空间:    s1=new int;
申请N个元素的动态一维数组:        s1=new int[N];
申请N行M列的动态二维数组:        q=new int*[N];
            for(i=0;i<N;i++)    {q[i]=new int[M];}

释放动态内存空间——delete:
释放1个int型动态内存空间:    delete s1;
释放N个元素的动态一维数组:        delete []s1;
释放N行M列的动态二维数组:        for(i=0;i<N;i++)    {delete [] q[i];}
                delete []q;

7.强制转换
方法一:(目标类型)待转换类型的表达式;
方法二:目标类型名(待转换类型表达式);


8.异常处理
首先,我们要知道异常是什么。
换个说法——错误。我们写程序时碰到错误是必然的,那么我们了解错误码?
错误分为语法错误和运行错误。
语法错误很常见,根据编译链接时的提示可纠正。
运行错误时编译链接后,程序运行时发生的错误,包括不可预料的逻辑错误和可以预料的运行异常。
逻辑错误时由设计不当引起的,而运行异常时由系统运行环境造成的,如数组下标越界、内存空间不足、0作为除数等
这些异常可以通过增加预防代码来避免。
异常处理函数:
检查异常(try);    其格式为:        try{    被检查的语句};
抛出异常(throw);    其格式为:    throw  表达式;
捕捉异常(catch);    其格式为:        catch(变量或者异常处理数据的类型)    {    处理语句};

E.g:

 

可以看到,在检查到异常后,发生异常后的语句不再执行,程序直接跳转到捕捉异常中运行。
注意:
1、try语句和catch语句之间不能由任何语句。
2、只能有一个try语句,可以有多个catch语句,表示与不同的异常信息所匹配。
3、若未检查到异常,则跳过catch语句。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值