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

简介: C++学习之从C到C++

640.jpg


今日开工,别的祝福语我也不会,就祝大家开工大吉吧!


头文件的包含

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个特点:

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


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


目录
相关文章
|
3月前
|
算法 C语言 C++
C++语言学习指南:从新手到高手,一文带你领略系统编程的巅峰技艺!
【8月更文挑战第22天】C++由Bjarne Stroustrup于1985年创立,凭借卓越性能与灵活性,在系统编程、游戏开发等领域占据重要地位。它继承了C语言的高效性,并引入面向对象编程,使代码更模块化易管理。C++支持基本语法如变量声明与控制结构;通过`iostream`库实现输入输出;利用类与对象实现面向对象编程;提供模板增强代码复用性;具备异常处理机制确保程序健壮性;C++11引入现代化特性简化编程;标准模板库(STL)支持高效编程;多线程支持利用多核优势。虽然学习曲线陡峭,但掌握后可开启高性能编程大门。随着新标准如C++20的发展,C++持续演进,提供更多开发可能性。
79 0
|
22天前
|
编译器 C语言 C++
配置C++的学习环境
【10月更文挑战第18天】如果想要学习C++语言,那就需要配置必要的环境和相关的软件,才可以帮助自己更好的掌握语法知识。 一、本地环境设置 如果您想要设置 C++ 语言环境,您需要确保电脑上有以下两款可用的软件,文本编辑器和 C++ 编译器。 二、文本编辑器 通过编辑器创建的文件通常称为源文件,源文件包含程序源代码。 C++ 程序的源文件通常使用扩展名 .cpp、.cp 或 .c。 在开始编程之前,请确保您有一个文本编辑器,且有足够的经验来编写一个计算机程序,然后把它保存在一个文件中,编译并执行它。 Visual Studio Code:虽然它是一个通用的文本编辑器,但它有很多插
|
1月前
|
Java 编译器 C++
c++学习,和友元函数
本文讨论了C++中的友元函数、继承规则、运算符重载以及内存管理的重要性,并提到了指针在C++中的强大功能和使用时需要注意的问题。
19 1
|
4月前
|
存储 安全 编译器
【C++入门 四】学习C++内联函数 | auto关键字 | 基于范围的for循环(C++11) | 指针空值nullptr(C++11)
【C++入门 四】学习C++内联函数 | auto关键字 | 基于范围的for循环(C++11) | 指针空值nullptr(C++11)
|
4月前
|
人工智能 分布式计算 Java
【C++入门 一 】学习C++背景、开启C++奇妙之旅
【C++入门 一 】学习C++背景、开启C++奇妙之旅
|
4月前
|
存储 自然语言处理 编译器
【C++入门 三】学习C++缺省参数 | 函数重载 | 引用
【C++入门 三】学习C++缺省参数 | 函数重载 | 引用
|
4月前
|
小程序 C++
【C++入门 二 】学习使用C++命名空间及其展开
【C++入门 二 】学习使用C++命名空间及其展开
|
4月前
|
存储 C++ 索引
|
4月前
|
存储 C++ 容器
|
4月前
|
算法 数据处理 C++