【C++】The fundamentals of C++
《C++程序设计基础教程》——刘厚泉,李政伟,二零一三年九月版,学习笔记
文章目录
- 【前言】C 和 C++ 的区别与联系
- 1、程序设计语言简介
- 2、C++语言的特点与程序结构
- 3、过程型程序设计
- 4、面向对象程序设计
【前言】C 和 C++ 的区别与联系
C 和 C++是两种不同的编程语言,它们之间存在区别与联系。
区别
(1)语法特性:
-
C语言是面向过程的编程语言,注重程序的过程和函数的设计,语法相对简洁。
-
C++在C语言的基础上添加了面向对象的特性,如类、对象、继承、多态等,使得代码更加模块化和可复用。
(2)标准库:
- C语言的标准库主要包括输入输出函数、字符串处理函数等。
- C++在C语言标准库的基础上,添加了大量的模板库,如STL(Standard Template Library),包括容器、算法、迭代器等,方便开发和使用。
(3)内存管理:
- C语言需要手动管理内存,包括分配和释放内存空间。
- C++引入了自动内存管理机制,通过构造函数和析构函数自动处理内存的分配和释放,避免了内存泄漏和越界访问的问题。此外,C++还引入了智能指针等特性来进一步简化内存管理。
(4)异常处理:
- C语言中没有原生的异常处理机制,开发者需要使用错误码或其他方式来处理错误和异常情况。
- C++引入了异常处理机制(try-catch语句),可以捕获和处理程序运行过程中的异常情况,使得错误处理更加灵活和易于管理。
(5)名称空间:
- C++引入了命名空间(namespace)的概念,可以用来避免不同库或代码之间的命名冲突问题。而C语言没有命名空间的概念,通常通过文件作用域和static关键字来避免命名冲突。
(6)文件后缀名:
- C语言的源文件通常使用“.c”作为文件扩展名。
- C++的源文件则通常使用“.cpp”作为文件扩展名。
联系
(1)兼容性:C++是C语言的超集,大部分符合C语言语法规范的程序也可以在C++环境中编译和运行。C++程序员可以在C++中直接使用C语言代码,包括数据类型、基本语法结构、运算符以及大多数标准库函数等。
(2)应用场景:C语言以其高效、简洁的特点广泛应用于嵌入式和底层开发等领域;而C++则凭借其丰富的特性和灵活性适用于系统软件和应用软件的开发,如大型软件系统、图形图像处理、游戏开发等。
综上所述,C和C++在语法特性、标准库、内存管理、异常处理、名称空间以及文件后缀名等方面存在显著区别,但同时它们之间也存在紧密的联系和兼容性。在实际应用中,开发者可以根据项目的需求选择合适的语言来实现最优的开发效果。
1、程序设计语言简介
1)程序设计是人机交互的重要媒介
学好程序设计包含两个方面的内容,一方面要熟练掌握程序设计语言的使用方法,另一方面也要学会计算机思维分析和表达现实世界的问题。
2)程序设计语言的发展概况
-
机器语言:0,1 编码的指令序列构成,依赖于特定型号的计算机硬件,执行效率高,但难移植,对程序员来说编写、阅读和修改都比较困难
-
汇编语言:“ADD”、“MOV”,尝试用一些简洁的英文符号来代替指令中特定的二进制串,虽然也对硬件比较依赖,移植性不好,但程序精炼且质量高
-
高级语言:上述两种语言开发效率低且容易出错,人们开始寻找一种接近于数学或自然语言的编程语言,不依赖于硬件,编出的程序能在不同的机器上通用。第一个完全脱离机器硬件的高级语言 FORTRAN 于 1954 年问世!高级语言的发展也经历了从早期的无结构语言到结构化语言,从过程型语言到面向对象语言的历程
2、C++语言的特点与程序结构
1)C++语言的特点
- 语言简练、程序结构简单:大部分功能都由各种标准函数和类来实现
- 数据类型丰富、齐全:整数、实数、字符、字符串等基本数据类型,数组、指针、结构体等构造数据类型,还有类这一个特殊数据类型
- 运算符丰富、齐全:有常规运算符(算数、逻辑、关系运算符)和硬件有关的运算符(位、地址运算符)
- 语言的通用性及可移植性强:
2)简单的 C++ 程序例
eg 1-1 输出 “Hello World”
#include <iostream>
using namespace std;
int main()
{
cout << "Hello World";
return 0;
}
第一行,是一个“文件包含指令”,是 C++ 编译预处理指令之一,作用是将文件 iostream 的内容包含到该指令所在的程序文件中
第二行,使用命名空间 std,C++标准库中的类和函数的在命名空间 std 中进行了声明
cout
是 C++系统定义的对象名,成为输出流对象
return
返回 0 表示程序正常结束,如果程序不能正常执行,则会自动向操作系统返回一个非零值,一般为 -1
eg 1-2 求 a、b两个数之和
#include <iostream>
using namespace std;
int main()
{
int a,b,sum;
cin>>a>>b;
sum = a + b;
cout<<"a+b="<<sum<<endl;
return 0;
}
>>
是“提取运算符”,cin
是输入对象流
endl
是 C++输出时的控制符,作用是换行,end line
eg 1-3 输出两个数中的较大数
#include <iostream>
using namespace std;
int max(int x, int y)
{
int z;
if (x>y)
z = x;
else
z = y;
return z;
}
int main()
{
int a, b, m;
cin >> a >> b;
m = max(a, b);
cout << "max=" << m << "\n";
return 0;
}
output
1 2
max=2
输入的两个数据之间可用空格或回车键隔开
eg 1-4 用面向对象程序设计管理学生信息
#include <iostream>
using namespace std;
class Student
{private:
int num;
int score;
public:
void setdata()
{
cin >> num;
cin >> score;
}
void display()
{
cout<<"num="<<num<<endl;
cout<<"score="<<score<<endl;
}
};
int main()
{
Student stu1, stu2;
stu1.setdata();
stu2.setdata();
stu1.display();
stu2.display();
return 0;
}
output
1
98
2
99
num=1
score=98
num=2
score=99
数据成员和成员函数
3)C++程序的结构
- C++程序可以由一个或多个编译单元构成,每一个编译单元为一个文件
- 一个文件可以包括编译预处理命令(
#include <iostream>
: 包含标准输入输出库,用于输入输出操作。
#define, #ifndef, #endif 等:用于条件编译和宏定义)、头文件、命名空间、全局声明、函数等部分 - 一个函数由函数头部和函数体组成
- C++语句以分号结束
- 一个C++程序总是从 main 函数开始执行的
- 类是 C++ 新增加的重要的数据类型,是 C++ 对 C 的最重要的发展
- C++ 程序书写自由,一行内可以写几个语句,一个语句可以分写在多行上
- 好的、有使用价值的源程序都应当加上必要的注释
3、过程型程序设计
1)过程型程序设计的特点
一个过程型程序应包括以下两方面内容:
-
对数据的描述(数据结构)
-
对操作的描述(算法)
程序 = 算法+数据结构
优点:
- 简单直观:过程型程序设计通常比较直观,易于理解和实现。程序按照步骤执行,逻辑清晰,对于小型项目或简单任务来说,这种直观性是优势。
- 资源高效:在某些情况下,过程型程序设计可能更为资源高效,因为它通常不需要额外的抽象层,而直接执行任务步骤。
- 易于调试:由于程序是按照顺序执行的,定位和调试问题相对较为容易。程序员可以逐步追踪代码的执行流程。
缺点:
- 可维护性差:随着项目规模的增大,过程型程序设计可能导致代码难以维护。添加新功能或修改现有功能可能会影响整个程序,增加了出错的可能性。
- 可重用性差:过程型程序设计通常缺乏良好的模块化和抽象,使得代码的重用性降低。相同或类似的功能可能需要在不同的地方重复实现。
- 不适用大型项目:在大型、复杂的项目中,过程型程序设计可能难以应对复杂性和需求的变化。面向对象编程等其他范式更适合大型项目的组织和管理。
2)程序设计流程图
算法的描述方法有用自然语言表示算法、流程图表示算法、N-S盒图表示算法、伪代码表示算法、计算机语言表示算法
4、面向对象程序设计
1)面向对象程序设计的特点
Object-Oriented Programming,OOP
- 抽象,Abstraction,忽略对象的无关细节,强调对象的关键特征和行为
- 简化问题
- 提高代码的可读性
- 促进代码重用
- 封装,Encapsulation
- 数据隐藏:对象的内部数据对外部不可见,只有通过对象的接口才能访问和修改这些数据
- 提高代码的可维护性:封装将数据和操作封装在一起,形成一个独立的单元。这使得代码更加模块化和易于维护。当需要修改对象的行为时,只需修改对象内部的实现细节,而无需修改外部代码。
- 促进代码重用
- 继承,Inheritance,它允许子类继承父类的属性和方法,从而实现代码的复用和扩展。
- 代码复用
- 扩展功能
- 建立层次结构
- 多态,Polymorphism,它允许不同类型的对象对相同的消息做出不同的响应。例如同样是加法,把两个字符串加一起和把两个整数加一起的内涵是完全不同的
- 提高代码的可重用性
- 简化接口设计
2)如何进行面向对象程序设计
- 面向对象分析,Object Oriented Analysis,OOA
- 面向对象设计,Object Oriented Design,OOD
- 面向对象编程,Object Oriented Programming,OOP
- 面向对象测试,Object Oriented Test,OOT
- 面向对象维护,Object Oriented Soft Maintenance,OOSM
面向对象程序设计需要遵循一定的步骤和原则,包括需求分析、架构设计、详细设计、编程实现以及封装、继承、多态和抽象等面向对象设计的原则。通过定义类和对象、实现类的内部实现、建立对象之间的联系以及调试和测试等步骤,可以开发出高效、可维护和可扩展的面向对象程序。