5.对象类与继承(C++学习笔记)

OOP(面向对象编程系统)

面向对象编程是一种使用类和对象来设计程序的方法或范例。 它通过提供一些简化了软件开发和维护的概念:

  • 对象(任何具有状态和行为的实体都称为对象)
  • 类(对象的集合称为类。 它是一个逻辑实体)
  • 继承(当一个对象获取父对象的所有属性和行为,称为继承。 它提供代码可重用性。 它用于实现运行时多态性。)
  • 多态(当一个任务通过不同的方式执行时,即被称为多态性。在C++中,我们使用函数重载和函数重写来实现多态。)
  • 抽象(隐藏内部细节和显示功能被称为抽象。在C++中,使用抽象类和接口来实现抽象。)
  • 封装(将代码和数据绑定(或包装)在一起成为单个单元称为封装。)

OOP相对于面向过程的编程语言的优点

  • OOP(面向对象)使开发和维护变得更容易,因为在面向过程的编程语言中,如果代码随着项目规模的增长而增长,就不容易管理。

  • OOP(面向对象)提供数据隐藏,而在面向过程的编程语言中,可以从任何地方访问全局数据。

  • OOP(面向对象)提供更有效地模拟真实世界事件的能力。 如果我们使用面向对象的编程语言,就可以提供真实世界里的问题的解决方案

C++对象和类

(注意:在C++中,对象是一组相似的类。 它是一个模板,用于从中创建对象。 它可以有字段,方法,构造函数等。)

C++ this指针

在C++编程中,this是一个引用类的当前实例的关键字。 this关键字在C++中可以有3个主要用途。

  1. 用于将当前对象作为参数传递给另一个方法。
  2. 用来引用当前类的实例变量。
  3. 用来声明索引器。

C++ static关键字

在C++中,static是属于类而不是实例的关键字或修饰符。 因此,不需要实例来访问静态成员。 在C++中,static可以是字段,方法,构造函数,类,属性,操作符和事件。

C++ static关键字的优点

内存效率: 现在我们不需要创建实例来访问静态成员,因此它节省了内存。 此外,它属于一种类型,所以每次创建实例时不会再去获取内存。

C++静态字段

使用static关键字声明字段称为静态字段。它不像每次创建对象时都要获取内存的实例字段,在内存中只创建一个静态字段的副本。它被共享给所有的对象。


 

C++结构体

在C++中,类和结构体(struct)是用于创建类的实例的蓝图(或叫模板)。结构体可用于轻量级对象,如矩形,颜色,点等。

与类不同,C++中的结构体(struct)是值类型而不是引用类型。 如果想在创建结构体之后不想修改的数据,结构体(struct)是很有用的。

 

C++枚举

C++中的枚举是一种包含固定常量的数据类型。

枚举可以用于星期几(SUNDAYMONDAYTUESDAYWEDNESDAYTHURSDAYFRIDAYSATURDAY),方向(NORTHSOUTHEASTWEST等)。C++枚举常量是静态和最终隐式。

C++枚举可以认为是具有固定的常量集合的类。

C++中枚举注意事项

  • 枚举提高了类型安全性
  • 枚举可以很容易地在switch语句块中使用
  • 枚举可以遍历
  • 枚举可以有字段,构造函数和方法
  • 枚举可以实现许多接口,但不能扩展任何类,因为它在内部扩展Enum


C++友元函数

如果一个函数在C++中定义为一个友元(使用friend作为修辞符)函数,那么可以使用该函数访问类的protectedprivate数据。

通过使用friend关键字,编译器知道给定的函数是一个友元函数。为了访问数据,友元函数的声明应该在以关键字friend开头的类的主体内部进行。



 
 

C++继承

在C++中,继承是一个对象自动获取其父对象的所有属性和行为的过程。 在示例方式中,您可以重用,扩展或修改在其他类中定义的属性和行为。

在C++中,继承另一个类的成员的类称为派生类,其成员被继承的类称为基类。 派生类是基类的子类。

C++继承的优点

代码可重用性:现在可以重用父类的成员。 因此,不需要再次定义那些跟父类成员。 因此在类中需要较少的代码,提高了代码的重用。

例:

C++多级继承示例

当一个类继承一个被另一个类继承的类时,它被称为C++中的多级继承。 继承是传递的,所以最后的派生类获取所有其基类的所有成员。



 

C++聚合 

在C++中,聚合是一个进程,一个类将另一个类定义为实体引用(一个类作为另一个类的成员)。 这是另一种重用类的方法。 它是一种表示HAS-A关系的关联形式。

C++聚合示例

下面来看看一个聚合的例子,其中Employee类有Address类的引用作为数据成员。 这样,它可以重用Address类的成员。



原文地址:https://www.cnblogs.com/jayYuan/p/14507336.html