C++教程-----面向过程程序设计和面向对象程序设计的区别和C++语言的基础输入输出以及string的使用

C++教程正在更新中,具体可以查看教程目录

学习C++的时候我们都知道C++是面向对象的程序设计,而C语言是面向过程的程序设计语言,这这一篇文章将会去介绍面向过程程序设计和面向对象程序设计的区别C++语言的基础输入输出以及string的使用

面向对象程序设计介绍

面向过程程序设计

什么是面向过程程序设计呢?

由于早期的计算机程序比较小,主要的开发方式是为个人设计使用,组织原则比较淡薄,编写一个程序只需要将相应的程序代码组织在一起即可,之后再让计算机去执行代码,就可以完成所需要的程序的功能,但是呢,随着计算机的普及和发展,程序的规模和复杂度都在增大,于是个人开发程序的方式已经不能满足要求,并且在维护程序的时候也很困难。

于是为了提高软件的生产方式和产率面向过程程序设计就出现了,也被称为结构化程序设计(Structure Programming, SP)的思想。结构化程序设计采用的是“自顶向下,逐步求精,模块化”的方法进行程序设计,主要的几步是模块分解,功能抽象,自顶向下,之的方法。简单来说就是将一个复杂庞大的软件系统分解成易于控制,处理,独立编程的子模块,各个模块都可以运用函数来实现,主要的额三种基本结构是顺序,分支,循环。

其基本特点是:

​ 1.按层次组织模块

​ 2.每个模块只有一个入口,一个出口

​ 3.代码数据分离,就是常说的:程序 = 数据结构 + 算法(关于数据结构和算法将在我的博客下的其他专栏近期开始更新)

结构化程序设计是一种以功能为中心的面向过程的程序设计方法,这种方法的核心就是将需要解决的问题分成若干的功能模块(这就是所谓的分治的思想),再根据模块的功能设计一系列的用于存储数据的数据结合,写一些函数(所谓的过程),对这些数据进行操作,最终设计好的程序是由许多函数(过程)组成的。

在结构化的程序设计中,数据和过程被分成了相互独立的程序,在设计程序的时候必须要考虑所要处理的数据的结构和类型,比如:对不同的格式的数据需要做相同的处理,或者对相同的数据进行不同的处理,为此我们需要编写不同的程序,这样一来,我们编写的代码的可重用性不高,同时如果需要对数据结构进行维护的时候,各种与之相关的过程都需要进行修改,这样无疑增大了程序维护的难度。

同时面向过程的程序设计存在着数据和函数之间的潜在关联,如果需要对于某个全局变量的数据进行修改的时候,同时可能引起程序设计的混乱甚至程序的崩溃,在较大的程序时,这个问题更为突出,给所实现的软件程序维护时产生困难。

这样面向对象程序设计就应运而生了。

面向对象程序设计

维基百科的解释如上。

摘录如下:

面向对象程序设计(英语:Object-oriented programming,缩写:OOP)是种具有对象概念的程序编程典范,同时也是一种程序开发的抽象方针。它可能包含数据、属性、代码与方法。对象则指的是类的实例。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性,对象里的程序可以访问及经常修改对象相关连的数据。在面向对象程序编程里,计算机程序会被设计成彼此相关的对象。

面向对象程序设计可以看作一种在程序中包含各种独立而又互相调用的对象的思想,这与传统的思想刚好相反:传统的程序设计主张将程序看作一系列函数的集合,或者直接就是一系列对电脑下达的指令。面向对象程序设计中的每一个对象都应该能够接受数据、处理数据并将数据传达给其它对象,因此它们都可以被看作一个小型的“机器”,即对象。当前已经被证实的是,面向对象程序设计推广了程序的灵活性和可维护性,并且在大型项目设计中广为应用。此外,支持者声称面向对象程序设计要比以往的做法更加便于学习,因为它能够让人们更简单地设计并维护程序,使得程序更加便于分析、设计、理解。反对者在某些领域对此予以否认。

当我们提到面向对象的时候,它不仅指一种程序设计方法。它更多意义上是一种程序开发方式。在这一方面,我们必须了解更多关于面向对象系统分析和面向对象设计(Object Oriented Design,简称OOD)方面的知识。许多流行的编程语言是面向对象的,它们的风格就是会透由对象来创出实例。

重要的面向对象编程语言包含Common Lisp、Python、C++、Objective-C、Smalltalk、Delphi、Java、Swift、C#、Perl、Ruby 与 PHP等。

简述一下:

由于软件的规模的复杂度不断增加,并且软件升级改版维护的时间间隔越来越短,面向过程的程序设计技术并不能满足软件开发效率和更新维护等方面的需求,因此取而代之的面向对象程序设计。

面向对象程序设计是指以对象为中心,从而分析。计算机求解的大多数是现实中的问题,他们由一些相互联系并且处于不断运动变化的事物(就是所谓的对象)组成。

面向对象程序设计语言的特征:

1.抽象(abstract):有意忽略某些细节和与当前求解问题无关的方面,把事物的主要特征抽取出来,来描绘客观事物。

2.封装:将抽象出的特征(数据)和行为(函数)捆绑成一个整体,并且编码实现抽象所设计的功能,只需要传递正确的参数,就能使用所需要的功能。

3.继承:面向对象的程序设计语言允许一个新的类从现有的类中派生而来,并且能够修改或增加新的属性和行为,称为功能更强大,更能满足应用需求的类。

4.多态:不同对象针对同一种操作会出现不同的行为,多态和继承密切相关,通过继承产生不同的类,这些类分别对某个成员函数进行了定义,这些类的对象调用该成员函数时做出不同的响应,执行不同的操作,实现不同的功能。

C++程序设计基础,和输入输出

C++程序设计的结构

C++程序设计由声明,函数,主函数这三个部分构成,C++的程序文件包含:头文件(后缀名为 .h/,hpp ),源文件(后缀名为 .cpp )。在这里讲解并不生动,在之后的实践中将会具体介绍,这样会理解的更清楚。

C++的注释

在编写程序的时候,尤其是当编写项目,代码量巨大的时候,注释必不可少,程序的代码拥有较好的注释,可以让其他人读代码的时候更加容易理解,因为不同人写的代码千差万别,拥有较好的注释在后面对程序升级,调试,改进的时候也有较大的益处。

C++中提供了两种注释的方法,具体操作实例如下:

int main(){
	int number_1,number_2;//定义两个数字 
	scanf("%d%d",&number_1,&number_2);
	/*输入两个数字*/ 
	printf("%d",number_1+number_2);
	/*
		求和后输出两个数字 
	*/ 
	return 0;
}

第一种是:// 可以注释一行,注释的内容是两个反斜杠后面的内容,并且只注释一行。

第二种是:/**/ ,一个反斜杠一个星号,一个反斜杠,一个星号,中间的部分是被注释的内容,被注释的内容可以分布在多行,没有范围限制。

两种注释方法根据不同的环境都有使用。

C++代码编写规范

写代码的时候一定要有规范,这里的规范不一定指的是代码所有人全部一个规则,而是代码给人能看的下去的感觉。有如下几个要点需要特别注意:

1.不要随便起变量名称如abcdefg,更不要用拼音,变量名称能清晰的表示对象的意思,如果不能清晰地表示尽量加上注释。

2.缩进,缩进一定要加,并且随着层数不同缩进的数目也应不同,并且不能用空格甚至数量不等的空格表示。

3.return 0; return 0一定要加,虽然可能对程序影响不大,但是一定是要加的。

可以看一下我写的代码,仅作为参考,因为大部分初学者代码风格差,代码较丑,是有很大影响的。新手尽量规范代码形式:

#include<map>
#include<list>
#include<queue>
#include<stack>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<windows.h>
#define R register 
#define LL long long 
using namespace std;

int number_1,number_2;

inline void open(){
	printf("Hello, please input two numbers: ");
}

int main(){
	while(true){
		open();
		scanf("%d%d",&number_1,&number_2);
		printf("%d\n",number_1+number_2);	
	}
	return 0;
}

C++数据类型

C++为我们提供了许多不同的数据类型,包括:

数字的:short, int, long, long long, double, float等

逻辑的:bool, void等

字符的:string, char等

STL模板库:包括队列,大小根堆,链表,优先队列,图,哈希表等等很多

还有很多指针,class等等

这里很难介绍完全,当需要使用的时候在进行查找也可以。

C++中流的概念

维基百科中这样解释字符串流摘录如下:

在计算机科学领域,字符串流(英语:stream),又译流,这个词有很多用法。所有这一些用法都是代表一个包含数据的序列。我们可以将字符串流想做是一个允许数据一个接一个,而非将数据包作一整个,来进行处理的输送带。
在Unix以及其他与C语言相关的系统,字符串流是一个数据的源头(source)或者接收处(sink),一般是独立的一堆比特(bytes)或字符(characters)。字符串流是在读写文件,或者透过网络接口(socket)跟其他电脑沟通时,使用的一个抽象的概念。这里的标准流则是代表在系统里面所有程序都可以取用的三个字符串流。
Pipelines也可以用字符串流的方式理解。
在Scheme语言和某些其他语言,字符串流是一个惰性求值。字符串流可以用类似list的方式使用。因此字符串流可以用来表示无限序列和无穷级数.
在Smalltalk标准程序库和一些编程语言中,字符串流是一种外部迭代器。在这个概念里面,字符串流可以用来代表有限或者无限的序列。
Stream processing—在并行计算里面,特别是图像处理的部分,字符串流这个词可以同时用在硬件跟软件上面。
档管理系统可以对单一文件名使用很多分别的独立字符串流。有一个主要的字符串流处理文件主要的数据。其余的字符串流可以用来存储图标,文件摘要和信息(这个文件从哪里下载的)等等的信息。

这样的概念可能较难理解,下面给大家直白的解释一下:

流:我们可以理解成水流,这样的水流通常是从输入设备出发,到输出设备终止,这样的水流上通常运载着大量有输入设备输入的信息这样的流中包含着很多信息,这样的数据称为字节流,同时还有图像,声音等等。字节流通常代表的是字符。

输入流(input stream):从输入设备到内存

输出流(output stream):从内存到输出设备

cin输入

cin是C++中iostream中定义的输入流对象,使用方式要比scanf简单但是输入效率较低,因为cin主要是默认cin与stdin保持同步,这样会消耗大量的时间,但是只需要关闭输入流的同步即可,在主函数的开头加上std::ios::sync_with_stdio(false):即可,这样的操作可以大大加快cin的效率。

cin的输入方式为:cin>>x1>>x2>>…>>xn其中xn可以是数字,字符,字符串等等

cin之后只能为变量

cin使用时需要调用iostream库

cout输出

cout是C++中iostream定义的输出流对象。

输出方式为cout<<x1<<x2<<…<xn其中xn可以是数字,字符,字符串等等

cin,cout输出举例

下面编写代码来演示cin,cout的用法

#include<map>
#include<list>
#include<queue>
#include<stack>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<windows.h>
#define R register 
#define LL long long 
using namespace std;

int main(){
	int number_1, number_2;
	cin >> number_1 >> number_2;
	string massage = "The answer is: ";
	cout << massage << number_1 + number_2 << "! " << "\n";
	return 0;
}

这段代码中包含了C++的cin和cout的绝大多数用法,可以通过栗子来学习cin和cout的使用方式。

cout函数

在C++中内置了很多函数

1.setprecision()函数设置浮点数的精度:

setprecision(n)函数可以控制输出时数据精确到n-1位,使用时需要调用iomanip库,具体使用方式如下:

double pi = 3.1415926, number = 1.23456789;
cout << setprecision(2) << pi << " " << number;

输出数据为:3.1 1.2

这个函数保证一个cout的输出数据的输出精度均为保留到小数点后n-1位

2.setw()设置输出宽度和对其方式

setw(n)可以设置数字占位长度和对其方式,并且只针对函数后的数字,之后的数字恢复默认的对其方式和占位,当n<0时,数据左对齐,当n>0时,数据右对齐,当n小于等于数据位数时,数据全部输出,当n大于数据位数时,不足的位数用空格补足,使用函数时需要调用iomanip库,使用方式如下:

double pi = 3.1415926, number = 1.2345678;
cout << setw(-10) << pi << setw(10) << number;

输出结果为:3.14159 1.23457

进制数设置

在计算机中通常要输入不同进制的数据,C++的iostream库同样内置了hex,dec,oct三个函数。

hex(十六进制),dec(十进制),oct(八进制),他们可以运用于cin和cout的输入和输出,并且在设置后一直有效,直到下一次重新设置,使用方式如下:

#include<map>
#include<list>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<cstdio>
#include<iomanip> 
#include<cstring>
#include<iostream>
#include<algorithm>
#include<windows.h>
#define R register 
#define LL long long 
using namespace std;

int main(){
	int number;
	cin >> hex >> number;//输入十六进制的number
	cin >> dec >> number;//输入十进制的number 
	cin >> oct >> number;//输入八进制的number
	cout << hex << number << "\n";//输出十六进制的number 
	cout << dec << number << "\n";//输出十进制的number 
	cout << oct << number << "\n";//输出八进制的number 
	return 0;
}

如果输入为三个15,即最后的number的值为八进制的15,那么输出结果为:

d
13
15

stirng字符串

string是C++自带STL模板库中提供的字符串类型,可以定义字符串对象,并且可以同时使用<,>,=,+等运算符。

1.定义string类型的对象

定义方式如下:

string string_1;//定义一个空字符串
string string_2 = "Hello World";//定义一个字符串并赋值为Hello World
string string_3[5] = {"A", "A", "A", "A", "A"};//定义一个字符串数组,每个格子中的字符串为A
string string_4[3] = (3, "Hello World");//定义一个字符串数组,每个格子内的字符串为Hello World
cout << string_1 << "\n" << string_2 << "\n" << string_3[0] << "\n" << string_4[0] <<"\n";

2.字符串的连接

string类型的字符串满足+的运算性质,可以对两个字符串进行加法运算

string string_1 = "Hello";
string string_2 = "Lpy_Now";
string_1 +=" " + string_2;
cout << string_1;

输出的结果为:Hello Lpy_Now

3.字符串的比较

string类型的字符串满足>,<运算符,字符串之间可以按位数的ASCII直接进行比较,作用类似于strcmp函数,举个栗子:

string string_1 = "Hello";
string string_2 = "Lpy_Now";
if(string_1 > string_2){
	cout << "string_1 is bigger than string_2";
}
else if(string_1 < string_2){
	cout << "stirng_2 is bigger than string_1";
}

输出结果为string_2 is bigger than string_1因为逐位比较的时候L的ASCII大于H的所以string_2大于string_1

查看下一篇:C++变量类型和变量的定义
查看目录:C++教程目录

猜你喜欢

转载自blog.csdn.net/a1351937368/article/details/105130382
今日推荐