c++学习笔记---02---从一个小程序说起

Posted alm

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++学习笔记---02---从一个小程序说起相关的知识,希望对你有一定的参考价值。

从一个小程序说起

这一讲的主要目的是帮助大家在C语言的背景知识上与C++建立联系。

 

问题探索

 

问题:对一个整型数组求和。

要求:定义一个存储着 n 个元素的数组,要求用C语言完成这个任务。

赶紧的:大家一起动手!

参考:

#include <stdio.h>

int addArray( int array[], int n );

int main()
{
      int data[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
      int size = sizeof(data) / sizeof(data[0]);         

      printf("结果是: %d\n", addArray( data, size ));

      return 0;
}

int addArray( int array[], int n )
{
      int sum = 0;
      int i;          

      for( i=0; i < n; i++ )
      {
            sum += array[i];
      }

      return sum;
}

 

深入一点思考

 

我们说数组和指针他们的关系很复杂。

在刚才的例子中,我们加点“料”试试~

然后我们还能得出第二个版本的程序:

 1 #include <stdio.h>
 2 
 3 int addArray( int *array, int n );
 4 
 5 int main()
 6 {
 7       int data[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
 8       int size = sizeof(data) / sizeof(data[0]);
 9 
10       printf("结果是: %d\n", addArray( data, size ));
11 
12       return 0;
13 }
14 
15 int addArray( int *array, int n )
16 {
17       int sum = 0;
18       int i;
19 
20       for( i=0; i < n; i++ )
21       {
22             sum += *array++;
23       }
24 
25       return sum;
26 }

 

轮到C++了

 

以上两个程序从本质上来说是相同的,我们得出结论:将函数的参数声明为数组和声明为指针是一样的。

现在我们来考虑一个新的问题:将该程序用C++来实现试试。

 

 1 #include <iostream>  // ostream  C92 C99
 2 
 3 // using namespace std;
 4 
 5 int addArray( int *array, int n );
 6 
 7 int main()
 8 {
 9       int data[] = {0, 1, 2, 3, 4, 5,6, 7, 8, 9};
10       int size = sizeof(data) / sizeof(data[0]);
11 
12       std::cout << "?á1?ê?: " << addArray(data, size) << std::endl;
13 
14       return 0;
15 }
16 
17 int addArray( int *array, int n )
18 {
19       int sum = 0;
20       int i;
21 
22       for( i=0; i < n; i++ )
23       {
24             sum += *array++;
25       }
26 
27       return sum;
28 }

程序分析

 

这个小程序展示了C++对象的第一次使用。对象在哪里?就是这个”cout“。

cout 是一个输出流对象,它是”console out(控制台输出)“的缩写。是属于basic_ostream 类的对象。ostream 类在iostream头文件中定义。

 

什么是输出流?

 

其实也就是一个概念,在C++中引入了很多类似的概念:例如数据可以从键盘流入程序,又可以从程序流向屏幕、打印机等~

using namesapce std;

这条指定带给我们一个全新的概念:名字空间。

 

就是C++标准库所使用的所有标识符(即类、函数、对象等的名称)都是在同一个特殊的名字空间(std)中来定义的。

如果我们没有使用这条指令,我们将需要使用std::cout 这样的语法来调用输出流对象。

 

不知道大家有没有注意到“<<”这个符号很眼熟?

这个操作符不是C语言里边位运算的左移操作符吗?难道在C++里边改规则了?

 

事实上不是这样的,它只不过体现了C++的另一个特点:支持重载。重载事实上就是允许我们按照不同的方式使用同一个操作符。我们后边会详细讲解。

 

以上是关于c++学习笔记---02---从一个小程序说起的主要内容,如果未能解决你的问题,请参考以下文章

c++学习笔记---04---从另一个小程序接着说

Java8学习笔记 -- 从函数式接口说起

从Xcode10不再支持libstdc++说起

C++学习笔记13--异常处理

《C++ Primer Plus》学习笔记——C++程序创建到运行的整个过程

小甲鱼零基础汇编语言学习笔记第四章之第一个汇编程序