1.1 C++简介
前言
C++ 继承了C语言高效,简洁,快速和可移植性的传统。C++面向对象的特性带来了全新的编程方法,这种方法是为应付复杂程度不断提高的现代编程任务而设计的。C++的模板特性提供了另一种全新的编程方法—泛型编程。
以上三件法宝确定了C++语言的特色。
在第一章中我将按照本书的逻辑讲起,在从中增加一些自己的见解(斜体加粗的部分是一些要解释名词术语或者问题)。
C++简介
C++融合了3种不同的编程方式:C语言代表的过程性语言,C++在C语言的基础上添加的类代表面向对象语言以及C++模板支持的***泛型编程
过程性语言:
面向过程的语言,顾名思义,是一种过程化的语言,用步骤(在C语言中可以看为函数)从头到尾描述了一个事件,这里我们以烧水为例子:
将水放入水壶中->将水壶放到火炉上->打开天然气->点火
面向对象语言: 要理解面向对象的语言首先要知道所谓的对象是什么,在C++编程语言中,所谓的对象是具有一类相同属性和行为的一类事物,放在现实世界中,对象可以是人(人有身高,长相等属性,也有吃饭,睡觉等行为),动物等等
同样我们以烧水为例子:
我这里将烧水这个事件分为三个对象:水壶,火炉,水
代码就可以这样描述:水.放入(水壶)–> 水壶.放置(火炉)–> 火炉.点燃(),当然你也可以分类为不同的对象,给每个对象添加相应的属性与行为,来实现烧水这个事件。
过程性语言与面向对象语言各自的优缺点:
对于过程性语言来说,它的优点是符合我们的传统思维,对于初学者来说,特别符合我们的过程认知,一件事就是一步一步来的;缺点也非常明显,由于我们所编写的是一个过程性的代码,中间有一个步骤出错或者发生改变都有可能导致整体崩溃,代码难以维护和复现。
对于面向对象语言来说,他的优缺点可以说与过程性语言正好反过来,优点即是便于维护和复现,面向对象的语言他将一些函数和属性封装到一个对象中,当我们需要改变或者调换时只需要对对象进行操作就行,而不需要考虑整体的流程,同样针对对象进行操作,这个行为确实不太符合我们的传统认知或者说是惯性思维,因此代码解读比较困难。
泛型编程: 所谓泛型即是广泛的类型,与之相对立的就是针对特定类型的编程下面给出具体的例子来理解:
//只针对整型的编程
#include <iostream>
// 针对 int 类型的冒泡排序
void bubbleSort(int arr[], int n) {
for (int i = 0; i < n - 1; ++i) {
for (int j = 0; j < n - i - 1; ++j) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int main() {
int arr[] = {64, 34, 25, 12, 22, 11, 90};
int n = sizeof(arr) / sizeof(arr[0]);
bubbleSort(arr, n);
for (int i = 0; i < n; ++i) {
std::cout << arr[i] << " ";
}
std::cout << std::endl;
return 0;
}
//泛型编程
#include <iostream>
// 泛型冒泡排序
template <typename T>
void bubbleSort(T arr[], int n) {
for (int i = 0; i < n - 1; ++i) {
for (int j = 0; j < n - i - 1; ++j) {
if (arr[j] > arr[j + 1]) {
T temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int main() {
int intArr[] = {64, 34, 25, 12, 22, 11, 90};
int n1 = sizeof(intArr) / sizeof(intArr[0]);
bubbleSort(intArr, n1);
for (int i = 0; i < n1; ++i) {
std::cout << intArr[i] << " ";
}
std::cout << std::endl;
double doubleArr[] = {6.4, 3.4, 2.5, 1.2, 2.2, 1.1, 9.0};
int n2 = sizeof(doubleArr) / sizeof(doubleArr[0]);
bubbleSort(doubleArr, n2);
for (int i = 0; i < n2; ++i) {
std::cout << doubleArr[i] << " ";
}
std::cout << std::endl;
return 0;
}
通过上述的例子我们可以明白泛型编程与针对特定类型的编程相对立是利用 模板 进行编程的可以运用于多种类型的数据的编程方式。
关于模板大家可以参阅以下该链接:
C++与C语言的联系
有无C语言基础与C++学习
C++编程语言一开始是从C语言中衍生出来的,C++基本上保留了C语言的基本类型、运算符、控制结构等等,如若对C语言有一定的了解,你可以很容易的上手,但是C++毕竟是有着面向对象进行编程的特性而C语言则是过程性的语言,所以如果对C语言运用非常熟练的话,需要改变一下自己的编程习惯,适应C++ 的编程操作。