原创 无言 C语言编程学习基地 2020-07-22

C/C++编程笔记:C++入门知识丨认识C++面向过程编程的特点_c++

一. 本篇要学习的内容和知识结构概览

C/C++编程笔记:C++入门知识丨认识C++面向过程编程的特点_c++_02

二. 知识点逐条分析

1. 使用函数重载

C++允许为同一个函数定义几个版本, 从而使一个函数名具有多种功能, 这称之为函数重载.

像这样: 虽然函数名一样, 但是参数列表不一样, 一个求两个整型参数的最大值, 一个求三个整型参数的最大值.

C/C++编程笔记:C++入门知识丨认识C++面向过程编程的特点_c++_03

2. 新的基本数据类型及其注意事项

a. void是无类型标识符, 只能声明函数的返回值类型, 不能声明变量

b. C++当中有bool类型, 而C中没有

c. C++的常量分为符号常量, 浮点常量, 整数常量

   像这样:

C/C++编程笔记:C++入门知识丨认识C++面向过程编程的特点_c++_04

我们可以通过屏幕输出来查看011, 11, 0x11各代表十进制的多少


3. 动态分配内存

申请内存空间: new 类型名[size], 申请可以存size个该数据类型对象的存储空间

释放内存空间: delete 指针名;

像这样:


4. 引用

为现有对象起个别名, 别名代表的内存空间与引用对象的内存空间是一样的

引用的声明方式: 数据类型(类型名) & 别名 = 对象名;

&的位置无关紧要

像这样:


我们再进一步的使用它


可以看到, 上下两组输出结果是一样的, 也就是说引用b, 和变量a都是代表的同一块内存地址

所以更改b的值, a的值也会变


注意: 引用, 就是给一块已经存在的内存添加一个新的标识符, 所以使用引用没有分配新的内存空间, 所以可以通过引用来修改原来的对象, 但是不能有空引用, 它必须和一声正确的存储区域关联。

像这样: 是错误的

int & b;// 编译器提示信息: Declaration of reference variable 'b' requires an initializer, 变量b需要一个初始化器

引用的作用

a. 引用用于函数的参数表, 不产生临时对象, 提高安全性和执行效率


b. 引用用于函数返回值 用到的时候很少, 因为不安全, 你可能问访问到一个已经被释放的对象

引用可以这么使用


但是不能这么使用


指针和引用的区别和联系

联系: 它们都会对内存地址上存在的变量进行修改, 但引用不占用新的地址, 节省开销

区别: 指针是低级的直接操作内存地址的机制, 可由整型数强制类型转换得到, 功能强大, 但是容易出错, 引用是较高级的封装了指针的特性, 不直接操作内存地址, 不可强制类型转换得到, 安全性高.

5. 对指针使用const限定符

a. 指向常量的指针

int a = 5;

int b = 8;

const int * p = &a; // 指向常量的指针, 也就是"*p="不成立, 也就是不能通过指针p修改指向的内存地址中的值, 但是p的值可以更改

*p = 10; // 错误

p = &b; // 正确


b. 常量指针

int a = 5;

int b = 8;

int * const p = &a; // 常量指针, 也就是"p="不成立, 也就是p的值不能更改, 但是是它所指向的内存地址中的值可以修改

*p = 10; // 正确

p = &b; // 错误


c. 指向常量的常量指针

int a = 5;

int b = 8;

const int * const p = &a; // 指向常量的的常量指针, 既不可以通过p修改它所指向的内存地址中的值, 也不可更改p的值

*p = 10; // 错误

p = &b; // 错误


6. 泛型算法应用于普通数组

// 定义数组int a[] = {3, 2, 1, 5, 4};int b[5] = {};
// 数组反转//    reverse(a, a + 5);
// 升幂排序//    sort(a, a + 5);
// 降幂排序//    sort (a, a+5, greater<int>());
// 复制数组内容//    copy(a, a + 5, b);
// 逆向复制数组a中的内容到数组b//    reverse_copy(a, a + 5, b);
// 检索//    int * p = find(a, a + 5, 5);//    cout << p << endl;//    cout << a + 5 << endl;//    if (p == a + 5) {//        cout << "没有值为5的数组元素" << endl;//    } else {//        cout << "有值为5的数组元素" << endl;//    }
// 正向输出copy(a, a + 5, ostream_iterator<int>(cout, "数字 "));
cout << endl;
// 逆向输出reverse_copy(a, a + 5, ostream_iterator<int>(cout, "数字 "));
for (int i = 0; i < 5; i++) {    cout << a[i] << " ";}
cout << endl;
for (int i = 0; i < 5; i++) {    cout << b[i] << " ";}
cout << endl;

7. 程序的编辑, 编译, 连接, 运行的基本概念

使用编辑器编辑一个C++源程序, 也就是源文件,  扩展名为.cpp, 像这样: Hello.cpp;

使用C++编译器对这个源程序进行编译, 产生目标文件, 扩展名为.obj, 像这样: Hello.obj;

使用连接程序, 将目标文件与系统库连接, 产生可执行文件, 扩展名为.exe, 你这样: Hello.exe

任何时候我们都不要忘记语言只是我们解决问题的工具, 思想才是我们解决问题的本质, 技术不深, 我们可以去查, 去练习, 而思想只有慢慢的去陪养, 去思考, 去总结!


自学C/C++编程难度很大,不妨和一些志同道合的小伙伴一起学习成长!