【C++】掌握面向对象编程的四大特性、Lambda 表达式及 I/O 流

洁洁! 2024-09-20 11:05:01 阅读 68

这里写目录标题

OOP语言的四大特性lambda输入/输出流(I/O流)

OOP语言的四大特性

面向对象编程(OOP)是一种编程范式,它通过使用“对象”来组织代码。OOP 的四大特性是封装、继承、多态和抽象。这些特性帮助程序员更好地管理复杂的代码,使程序更易于理解和维护。

类-》实体的抽象类型

实体(属性,行为) -》 ADT(abstract data type)

属性-》成员变量

行为-》成员方法

类有三种访问限定符:public private protected

类的成员方法一经编译,所有的方法参数,都会加一个this指针

new =》malloc内存开辟 + 构造函数

delete ps; == 析构函数 +free(ps)

对象默认的拷贝构造是做内存的数据拷贝

关键是对象如果占用外部资源,那么浅拷贝就出现问题了。

封装(Encapsulation)

封装是指将数据(属性)和操作数据的方法(行为)打包在一起,形成一个“类”。封装有助于将对象的内部状态保护起来,只允许通过定义好的接口进行访问。这种信息隐藏的特性不仅有助于防止外部代码直接修改对象的内部数据,还使得程序的维护和修改变得更加容易。

封装的优势包括:

控制访问权限:通过定义公共接口和私有数据,程序员可以控制哪些数据可以被外部访问,哪些数据是只对对象内部可见的。这种控制有助于避免不必要的副作用和错误。

提高代码的可维护性:封装使得类的内部实现与外部使用分离,任何对内部实现的修改不会影响到外部使用者,只要接口保持不变。

减少复杂性:封装可以将复杂的功能模块化,用户只需了解如何使用接口,而不需要了解内部的实现细节。

继承(Inheritance)

继承是面向对象编程中的一种机制,它允许一个类(子类)继承另一个类(父类)的属性和方法。继承使得代码可以重用,同时也可以扩展和修改父类的功能。

继承的优势包括:

代码重用:通过继承,子类可以重用父类的代码,避免重复编写相同的功能。

扩展性:子类可以在继承父类的基础上添加新的属性和方法,或者重写父类的方法,以实现更多的功能。

层次结构:继承允许创建一个层次化的类结构,这使得系统的组织和分类变得更加清晰。

多态(Polymorphism)

多态是指一个接口(方法)可以有多种实现方式。具体来说,子类可以重写父类的方法,提供不同的实现,从而使得同一操作在不同对象上表现出不同的行为。

多态的优势包括:

灵活性:多态允许在运行时决定调用哪个方法实现,这使得程序可以处理不同类型的对象,而无需了解它们的具体类型。

扩展性:通过多态,可以方便地添加新的子类,而无需修改现有的代码。只需确保新子类遵循父类定义的接口即可。

简化代码:使用多态可以简化代码的结构,因为它允许通过统一的接口处理不同类型的对象,从而减少了复杂的条件判断。

抽象(Abstraction)

抽象是指从对象的具体实现中提取出公共的特性和行为,形成一个抽象的类或接口。抽象类和接口定义了子类应该实现哪些方法,但不提供具体的实现细节。

抽象的优势包括:

提高可维护性:抽象化使得系统的设计更具整体性,开发人员可以专注于设计公共接口,而不是具体的实现细节。

增强灵活性:通过定义抽象类或接口,程序员可以在不同的子类中实现不同的功能,而不会影响到抽象类或接口的设计。

促进模块化设计:抽象化帮助将系统拆分成更小、更可管理的模块,从而提高系统的整体结构性。

lambda

lambda表达式语法:

[捕获外部变量] (形参列表)->返回值{操作代码}

如果lambda表达式的返回值不需要,可以省略

[捕获外部变量]

[] :表示不捕获任何外部所有变量

[=] :以传值的方式捕获外部所有变量

[&] :以传引用的方式捕获外部变量

[this] :捕获外部的this指针

[=,&a] :以传值的方式捕获外部所以变量,但是a变量以传引用的方式捕获

[a,b] :以值传递的方式捕获外部变量a和b

[a,&b] :a以值传递的方式捕获,b以引用的方式捕获

输入/输出流(I/O流)

输入/输出流(I/O流)是计算机编程中用于处理输入和输出的抽象概念。它们提供了一种统一的方式来读取输入数据和将输出数据发送到不同的设备或文件。

I/O流以流的形式传输数据。流可以被看作是数据在程序和外部资源(如键盘、屏幕、文件等)之间的通道。数据可以从流中读取(输入)或写入到流中(输出),这样就实现了程序和外部资源之间的数据交换。

I/O流通常分为输入流和输出流两种类型:

输入流(Input Stream):用于从外部资源(如键盘、文件等)读取数据到程序中。程序可以逐个读取流中的数据,直到达到所需的数据或流结束。

输出流(Output Stream):用于将程序中的数据写入到外部资源(如屏幕、文件等)。程序可以将数据按照需要写入流中,然后流会将数据传输到指定的外部资源。

I/O流的基本概念:

输入流:用于读取数据。常见的输入流有从文件读取、从网络接收数据、从用户输入接收数据等。

输出流:用于写入数据。常见的输出流有向文件写入、向网络发送数据、向用户输出数据等。

流的分类:

字节流:处理基本的输入和输出操作,适用于所有类型的I/O操作。常见的字节流类有 InputStream 和 OutputStream。

java

InputStream inputStream = new FileInputStream("input.txt");

OutputStream outputStream = new FileOutputStream("output.txt");

字符流:处理字符数据,提供了对字符的编码和解码支持。常见的字符流类有 Reader 和 Writer。

java

Reader reader = new FileReader("input.txt");

Writer writer = new FileWriter("output.txt");

I/O流在不同的编程语言和操作系统中有不同的实现方式和API。例如,在C++中,常见的I/O流类包括 std::cin 和 std::cout 用于控制台输入和输出,以及 std::ifstream 和 std::ofstream 用于文件的输入和输出。而在Java中,常见的I/O流类包括 System.in 和 System.out 用于标准输入和输出,以及 FileInputStream 和 FileOutputStream 用于文件的输入和输出。

I/O流提供了一种通用的、抽象的方式来处理输入和输出,使得程序可以与不同的外部资源进行交互,并实现数据的读取和写入



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。