2.6节,面向对象设计
在前面,我们讲解了使用函数,封装重复代码的机构性设计方法。这种思路是以功能划分,把一个程序分解不同的功能模块,每个函数完成一个功能,最后再组合起来。这种设计方法在小型程序中是简洁并且可行的。但随着程序代码量的扩大,会遇到很多功能相似但又有区别的模块。数据变量和函数的关系在结构化设计中,只有局部变量和全局变量两种。变量和使用该函数之间并没有做关系的确定,没有对数据进行分类和保护。面向对象设计,与结构化设计这样面向过程的设计不一样,它把程序按实际应用的事物进行分类的。简单讲,结构设计是把一个事物按不同功能实现了,但没有考虑到后续升级维护可能需要程序也能处理类似事物。面向对象,要求程序员在最初的代码框架中,先分析事物本身的属性,从而可以在顶层设计中覆盖未来要升级的情况。下面我们讲解面向对象是如何实现的。
面向对象,在实际编程中是以类实现的,类是一种数据类型,类变量称为对象。类中,包含数据变量和函数,均具有三种访问权限属性:公有public、私有private和保护型protected。公有类型的变量或函数,可以在类外的程序中使用,而私有类型只能在类内使用。面向对象设计具有四大特性:抽象、封装,继承和多态。抽象,指的是我们使用类的方法,把具有类似属性的事物进行了分类,比如把电脑按操作系统属性分成windows电脑和苹果电脑。封装,指的是类的公有public、私有private和保护型权限属性的设计,体现了面向对象在数据安全性方面的优势。继承,指的是类和类之间可以继承,比如windows电脑类和苹果电脑类继承自电脑类,他们均和电脑类有共同的属性:CPU、内存、硬盘、操作系统等。继承的属性体现了面向对象在升级维护性方面的优势。多态,指的是继承自同一个基类的不同子类中,均可使用基类相同名称的函数,这样不同类对象,调用统一的函数接口,会得到不同的功能实现。这在结构化设计中是难以实现的。
以上是面向对象的理论内容,下面在具体的程序中学习类的定义和使用。
#include <iostream> using namespace std; //类的定义示例 class Computor { public: string name; //产品名 string cpu; // CPU型号 int ram; // 内存大小,单位GB int rom; // 硬盘大小,单位GB void show(void) { cout<<"CPU:"<<cpu<<endl; } }; //类继承示例 class Mac: public Computor { public: void show(void) { cout<<name; cout<<":MacOS"<<",CPU:"<<cpu<<","; showRAM();//私有类型的函数,只能在类内调用 } private: void showRAM(void) { cout<<"RAM:"<<ram<<"G"<<endl; } }; class Win: public Computor { public: void show(void) { cout<<name; cout<<":Windows"<<",CPU:"<<cpu<<endl; } }; int main( ) { //类对象的初始化示例 Mac MacBookAir; //定义苹果电脑对象MacBook Win RedmiBook; //定义windows电脑对象RedmiBook //设置MacBook参数 MacBookAir.name = "MacBookAir 2020"; MacBookAir.cpu = "i7-1060"; MacBookAir.ram = 8; MacBookAir.rom = 256; //设置RedmiBookk参数 RedmiBook.name = "RedmiBook 2020"; RedmiBook.cpu = "R5-4500"; RedmiBook.ram = 16; RedmiBook.rom = 512; //多态示例 MacBookAir.show(); RedmiBook.show(); return 0; }
相关理论讲解内容,也可在菜鸟网站上继续学习https://www.runoob.com/cplusplus/cpp-classes-objects.html
2.7节,高级编程概述
以下并不属于C++入门内容,所以我们只做概念介绍,后续Linux章节中,会在具体编程实践中学习。
2.7.1异常处理
在我们的程序遇到不适用情形就会发生异常,比如我们在通信过程中,连线突然中断。c++异常中包含捕捉异常和抛异常。
抛异常,使用throw语句。比如我们可以在函数中检查输入数据的情况,遇到不适用的情形,及时跑出异常。
捕捉异常,try{捕捉异常的语句段}catch(异常类型 变量名){异常处理语句段}
2.7.2文件操作
C++文件操作中,使用fstream标准库实现。
文件操作类型包括,读文件类型ifstream,写文件类型ofstream
文件操作接口函数:
void open(const char *filename, ios::openmode mode); //打开文件
void close();//关闭文件
2.7.3多线程操作
多线程,指的是我们可以同时做多样事情。简单理解,单向成相当于一个人干活,多线程相当于多个人一起干活。
一般地,我们不创建线程,程序就会从main()函数中循序执行,但我们使用创建线程接口pthread_create (thread, attr, start_routine, arg)时,我们就可以指出另一个独立循序的函数,这样我们就同时在运行两个循序函数。
结束时,可以调用pthread_exit (status)终止线程。当然,多线程带来性能提升的同时也带来了麻烦,程序不再依次执行,它是并行的,数据可能会被另一个线程篡改,我们需要对数据等进行制定访问机制。
原文:https://www.cnblogs.com/Baron-Lu/p/13275245.html