C++学习之从C到C++

栏目: C++ · 发布时间: 5年前

内容简介:C++的头文件包含头文件可以不加.h结尾,如iostream,一些常用的头文件在引用时可以不加.h后缀,并在开头增加c,如:在C中的强制类型转换为:(int )3.5;

头文件的包含

C++的头文件

包含头文件可以不加.h结尾,如iostream,一些常用的头文件在引用时可以不加.h后缀,并在开头增加c,如:

#include <cstdio>
	#include <cstring>
	#include <cstdlib>

强制类型转换

在C中的强制类型转换为:(int )3.5;

而在C++中的强制类型转换为int(3.5),更加清晰直观。

默认参数

在 C++ 中,声明一个函数时,可以指定默认的输入参数值。当调用有默认参数值的函数时,可以不写出参数,这时就相当于以默认值作为参数调用该函数。

例如:

void Function1(int x=20); 	 //函数的声明中,指明参数 x 的默认值是 20
Function1(); 				 	//正确的调用语句,等效于 Function1(20);

不仅可以用常数,还可以用任何有定义的表达式作为参数的默认值。例如:

int Max(int m, int n);
int a, b;
void Function2(int x, int y=Max(a,b), int z=a*b)
{
    //...
}

Function2(4);  //正确,等效于 Function2(4, Max(a,b), a*b);
Function2(4, 9);  //正确,等效于 Function2(4,9 , a*b);
Function2(4, 2, 3);  //正确
Function2(4, ,3);  //错误!这样的写法不允许,省略的参数一定是最右边连续的几个

C++中增加函数参数的默认值,可以像上面的 Function1 那样写在声明函数的地方,也可以像 Function2 那样写在定义函数的地方,但是不能在两个地方都写。

函数默认参数所带来的好处是使程序的可扩充性更好,即当程序需要增加新功能时,改动可以尽可能少。

试想下面这种情况。一个即将编写完成的绘图程序,其中有一个画圆的函数 Circle,画出来的圆都是黑色的,这时希望增加画彩色圆的功能,于是就需要在 Circle 函数中增加一个 int 型的 color 参数,用来表示颜色。

但是原来的程序中可能大多数调用 Circle 函数的地方依然只是画个黑色的圆就可以了,只有少数几个地方需要改成画彩色的圆。此时,如果要找出所有调用 Circle 函数的语句并补上颜色参数,会十分烦琐。

而有了函数参数默认值的机制,则只需为 Circle 函数的新参数指定默认值 0(假定 0 代表黑色),然后找出少数几个调用 Circle 函数画彩色圆的地方,补上颜色参数即可。

实践中这种情况 是经常发生的。

引用

在 C++ 中可以定义“引用”。定义方式如下: 类型名 &引用名 = 同类型的某变量名;

此种写法就定义了一个某种类型的引用,并将其初始化为引用某个同类型的变量。“引用名”的命名规则和普通变量相同。例如:

int n;
int & r = n;

r 就是一个引用,也可以说 r 的类型是 int &。第二条语句使得 r 引用了变量 n,也可以说 r 成为了 n 的引用。

某个变量的引用和这个变量是一回事,相当于该变量的一个别名。

也可以用一个引用去初始化另一个引用,这样两个引用就引用同一个变量。不能用常量初始化引用,也不能用表达式初始化引用(除非该表达式的返回值是某个变量的引用)。

总之,引用只能引用变量。

类型为 T& 的引用和类型为 T 的变量是完全兼容的,可以互相赋值。

引用的示例程序如下:

#include <iostream>
using namespace std;
int main()
{
    int n = 4;
    int & r = n;     		 	 //r引用了n,从此r和n是一回事
    r = 4;             			 //修改r就是修改n
    cout << r << endl;  	//输出4
    cout << n << endl;  	//输出4
    n = 5;              			//修改n就是修改r
    cout << r << endl;  	//输出 5
    int & r2 = r;         		//r2和r引用同一个变量,就是n
    cout << r2 << endl; 	//输出 5
    return 0;
}
  • 注意:定义引用时一定要将其初始化,否则编译无法通过。通常会用某个变量去初始化引用,初始化后,它就一直引用该变量,不会再引用别的变量。

引用作为函数的返回值

函数的返回值可以是引用。例如下面的程序:

#include <iostream>
using namespace std;
int n = 4;
int & SetValue()
{
    return n;  //返回对n的引用
}
int main()
{
    SetValue() = 40;  //返回值是引用的函数调用表达式,可以作为左值使用
    cout << n << endl;  //输出40
    int & r = SetValue();
    cout << r << endl;  //输出40
    return 0;
}

SetValue 函数的返回值是一个引用,是 int & 类型的。因此第 6 行使得其返回值成为变量 n 的引用。

第 10 行,SetValue 函数返回对 n 的引用,因此对 SetValue 函数的返回值进行赋值,就是对 n 进行赋值,结果就是使得 n 的值变为 40。

第 12 行,表达式 SetValue 函数的返回值是 n 的引用,因此可以用来初始化 r,其结果就 是 r 也成为 n 的引用。

总结

以上只是C和C++不同的几个点,其实还有很多不同的地方,如内联函数、函数重载、动态分配内存和字符串类型等等。C是面向过程的,而C++是面向对象的,面向对象的程序设计有以下4个特点:

  • 抽象
  • 封装
  • 继承
  • 多态

总之,面向对象的程序设计方法继承了结构化程序设计方法的优点,同时又比较有效地克服了结构化程序设计的弱点。

Jlink使用技巧系列文章:

欢迎大家关注我的个人博客

或微信扫码关注我的公众号

C++学习之从C到C++

以上所述就是小编给大家介绍的《C++学习之从C到C++》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Google 广告高阶优化(第3版)

Google 广告高阶优化(第3版)

【美】Brad Geddes(布兰德.盖兹) / 宫鑫、康宁、王娜 / 电子工业出版社 / 2015-9 / 99.00元

《Google 广告高阶优化(第3版)》可以说是Google AdWords的终极指南,内容非常丰富,第三版在内容上进行了全面更新。介绍了AdWords的最新最完整的功能,阐释其工作原理,也提供了相应的优化方法、策略和实践教程,读者可以随时在自己的PPC广告系列中进行实践。第三版增添了50多页新内容,涵盖Google系统最近的所有变动,包括广告系列结构的变化、出价调整器、重定向、视频广告功能、全新......一起来看看 《Google 广告高阶优化(第3版)》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具