《C++程序设计教程》——C++对C语言的扩充
来源:互联网 发布:游戏竞猜网站源码 编辑:程序博客网 时间:2024/05/21 19:31
1.3 C++对C语言的扩充
1.3.1 bool 类型
1.3.2 C++中类型转换
C++类型转换符一共有四种:
static_cast<new_type>(expression);
const_cast<new_type>(expression);
dynamic_cast<new_type>(expression);
reinterpret_cast<new_type>(expression);
(1)static_cast<>:
最常用的类型转换操作符,它主要执行非多态的转换,用于代替C语言中通常的转换操作。
(2)const_cast<>:
在进行类型转换时用来修改类型的const或volatile属性,除了const或volatile修饰之外,原来的数据值和数据类型都是不变的。
(3)dynamic_cast<>:
该操作符用于运行时检查类型转换是否安全,但只在多态类型时合法,即该类型至少具有一个虚拟方法。
(4)einterpret_cast<>:
通常为操作数的位模式提供较低层的重新解释。
1.3.3 C++中的字符串——string
(1)用string来定义字符串
string s1; s1="hello C++";string s2="hello C++";string s3("hello C++");string s4(6,'a');
(2)用[]来访问字符串中的字符
可以用是s[i]的形式来访问操作字符串中的字符。
(3)直接用“+”运算符将两个string字符串连接
cout<<s1+s2<<endl;
(4)可以直接比较两个string字符串是否相等
if(s1<s2) ....
(5)length()和size()函数
这两个函数都用来获取字符串的长度,功能相同,类似于C语言中的strlen()函数
s.length();s.size();
(6)swap()函数
用来交换两个字符串的值,其函数声明如下:
void swap(string &s);
1.3.4 引用
(1)引用的初始化
// 数据类型 &引用名 = 变量名;int a=10;int &b=a;
注意:
● 引用在定义时必须初始化,如int &b;语句是错误的。
● 引用在初始化时只能绑定左值,不能绑定常量值,如int &b=10;语句是错误的。
● 引用一旦初始化,其值就不能再更改,即不能再做别的变量的引用。
● 数组不能定义引用,因为数组是一组数据,无法定义其别名。
(2)引用作为函数参数
void swap(int& x, int& y){......}int mian(){...int a,b;swap(a,b);...}
引用作为函数参数特点:
● 传递引用给函数与传递指针的效果是一样的。这时,被调函数的形参就成为原来主调函数中的实参变量或对象的一个别名来使用,所以在被调函数中对形参变量的操作就是对其相应的目标对象(在主调函数中)的操作。
● 使用引用传递函数的参数,在内存中并没有产生实参的副本,它是直接对实参操作;而使用一般变量传递函数的参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量的副本;如果传递的是对象,还将调用拷贝构造函数。因此,当参数传递的数据较大时,用引用比用一般变量传递参数的效率和所占空间都好。
● 使用指针作为函数的参数虽然也能达到与使用引用的效果,但是,在被调函数中同样要给形参分配存储单元,且需要重复使用”*指针变量名”的形式进行运算,这很容易产生错误且程序的阅读性较差;另一方面,在主调函数的调用点处,必须用变量的地址作为实参。而引用更容易使用,更清晰。
(3)引用于const限定符
const int &a = 10; //常量值初始化const引用const int a = 10;const ing &b = a; //const对象初始化const引用
用非const对象初始化const引用,只是不允许通过该引用修改变量值。除此之外,const引用甚至可以用不同类型的变量来初始化const引用,例如:
double d = 1.2;const int &b = d;
1.3.5 动态分配内存(new和delete)
(1)new运算符
//new 数据类型(初始化列表)//创建基本数据类型对象char *pc = new char; //申请一段空间来存储char类型,内存没有初始值int *pi = new int(10);//申请一段空间存储int类型数据,初始值为10double *pd = new double();//申请一段空间存储double类型数据,默认初始值为0//创建数组对象//new 数组类型[数组长度]int *pi = new int[10]();char *pc = new char[10];double *pd = new double[0];
(2)delete 操作符
//delete 指针名;//释放数组:delete []指针名;delete pi;delete []pc;
1.3.6 默认参数
在定义或声明函数时给形参一个初始值,在调用函数时,如果不传递实参就使用默认参数值。
注意:
● 默认参数只可以在函数声明中出现一次,如果没有函数声明,只有函数定义,才可以在函数定义中设定。
● 默认参数定义是自右向左,即如果一个参数设定了默认参数,则其右边不能再有普通参数。
● 默认参数调用时,遵循参数调用顺序,即有参数传入它会先从左向右依次匹配。
● 默认参数值可以是全局变量,全局常量,甚至可以是一个函数,但不可以是局部变量,因为默认参数的值是在编译时确定的,而局部变量位置与默认值在编译时无法确定。
1.3.7 内联函数
inline只是建议编译器将函数嵌入到调用处,编译器会根据函数的长度,复杂度等自行决定是否把函数作为内联函数来调用。
1.3.8 重载函数
所谓的重载(overload)函数就是在同一个作用域内几个函数名字相同但形参列表不同。
- 《C++程序设计教程》——C++对C语言的扩充
- C++语言对C语言的扩充
- C++对C语言的扩充之一
- C++对C的扩充
- C++对C的扩充
- C++对C的扩充
- C++对C的扩充
- C语言的负数扩充
- 36、C++对C语言的面向对象的扩充
- C++中对C语言结构体用法的扩充
- C++对C的扩充(1)
- C++对C的扩充(2)
- C++对C的扩充(体现在面向过程程序设计部分)
- 35、C++对C语言的非面向对象的扩充
- C程序设计笔记——第一章 程序设计和C语言
- C++对C语言的非面向对象特性扩充(1)
- C++对C语言的非面向对象特性扩充(2)
- C++对C语言的非面向对象特性扩充(3)
- 无锁的数据结构(Lock-Free)及CAS(Compare-and-Swap)机制
- 使用编辑器填写的内容显示问题
- 2017年8月23日19:19:41
- Linux 安装MongoDB 并设置防火墙,使用远程客户端访问
- uva 122 Dropping Balls
- 《C++程序设计教程》——C++对C语言的扩充
- 贮油点问题
- 可移植的 Makefile 教程
- HDU-2017 多校训练赛8-1002-Battlestation Operational
- MyBatis实现Mysql数据库分库分表操作和总结
- Linux之Libcurl库的介绍与应用
- 一:爬虫简介
- HDU
- js实现轮播图