今天我要说的还是非标准数据类型——class(类)。
还是一样,先复习旧的知识:
基本数据类型:
整型 int / long / long long
布尔型 bool
字符型 char
实型
→ 单精度型 / 浮点型 float
→ 双精度型 double
…
非基本数据类型:
数组 [ ]
指针 *
空类型 void
结构体 struct
联合体 union √
枚举 enum √
类 class √
…
1、 class简介:
在C++中,类(Class)是一种用户自定义的数据类型,它允许您将数据和函数捆绑在一起,形成一个逻辑实体。类是面向对象编程(OOP)的基础,它提供了一种将数据和相关操作组织在一起的方式,使得代码更加模块化、可重用和易于理解。
-
数据成员(Data Members): 类可以包含数据成员,也称为属性或字段,用于存储对象的状态或属性。这些数据成员可以是各种数据类型,包括基本类型(如整数、浮点数)或其他类类型。
-
成员函数(Member Functions): 类可以包含成员函数,也称为方法或操作,用于操作对象的数据成员。这些成员函数可以访问和修改对象的数据,以执行特定的操作。
-
访问控制(Access Control): 类可以通过访问控制符来限制对其成员的访问。C++提供了三种访问控制级别:public(公有)、protected(受保护)和private(私有)。默认情况下,类的成员是私有的,只能在类的内部访问,但您可以使用访问控制符来更改这种行为。
-
封装(Encapsulation): 类支持封装,这意味着它可以隐藏实现的细节,只暴露必要的接口给外部。通过将数据成员私有化并提供公有的访问函数,类可以控制对其数据的访问,从而提高安全性和灵活性。
-
构造函数和析构函数(Constructor and Destructor): 类可以包含构造函数和析构函数,用于对象的初始化和清理。构造函数在对象创建时调用,而析构函数在对象销毁时调用,可以用来释放资源或执行其他清理操作。
-
类的实例化(Instantiation): 类的实例化创建了类的对象,也称为类的实例。可以使用类名和构造函数来实例化对象,并且可以创建多个对象来代表不同的实体。
-
继承(Inheritance): 类可以通过继承来派生新的类,从而创建类层次结构。子类(派生类)可以继承父类(基类)的成员,包括数据成员和成员函数,并且可以添加新的成员或覆盖父类的成员。
-
多态(Polymorphism): 类的多态性允许使用基类的指针或引用来引用派生类的对象,并且可以在运行时动态绑定到正确的函数。多态性可以通过虚函数和纯虚函数来实现。
总之,类是C++中的基本构造块,它允许您将数据和函数组织在一起,形成一个独立的、可重用的代码单元。通过封装、继承和多态等特性,类提供了一种强大的方式来设计和实现复杂的代码。
2、 class的深究和使用注意事项:
在深入使用C++中的类时,以下是一些注意事项和深入探讨的方面:
构造函数和析构函数的设计: 构造函数负责初始化对象的状态,而析构函数负责清理对象所使用的资源。在设计这两个函数时,需要考虑对象的生命周期和资源管理,确保正确地初始化和清理对象。
继承与多态的运用: 继承和多态是面向对象编程的核心概念,它们允许您创建更具灵活性和可扩展性的代码。在使用继承时,要注意继承的合理性和层次结构的设计,以避免出现过度复杂或不必要的继承关系。而在使用多态时,要注意正确地设计和使用虚函数,以实现运行时的动态绑定。
封装的实践: 封装是面向对象编程的重要原则之一,它有助于隐藏实现的细节,提高代码的安全性和可维护性。在实践中,要注意封装的适度和接口的设计,确保暴露给外部的接口是简洁、清晰和易于使用的。
友元函数和友元类的使用: 友元函数和友元类允许在一定程度上突破类的封装性,但需要谨慎使用,以避免破坏封装和增加代码的复杂性。
内存管理和对象生命周期: 在使用类时,要注意对象的内存管理和生命周期,避免内存泄漏和悬空指针等问题。可以使用智能指针等RAII(资源获取即初始化)技术来简化内存管理,确保资源在对象生命周期结束时被正确释放。
异常处理: 在类的设计和使用中,要考虑异常处理机制,确保代码能够正确地处理异常情况,并且不会导致对象状态不一致或资源泄漏等问题。
性能优化: 在使用类时,要注意性能优化的问题,避免不必要的对象拷贝和动态内存分配等操作,以提高代码的执行效率和性能。
综上所述,深入研究和使用C++中的类需要理解面向对象编程的基本原则,并在实践中注意设计的合理性、封装的适度、继承与多态的运用、内存管理和异常处理等方面。同时,要不断学习和积累经验,掌握更高级的技巧和最佳实践,以编写出高质量、高效率的C++代码。
是不是感觉有点枯燥无味?没事,用代码来实践!
3、关于class的例子:
这是一个表示猫的简单 类:
#include <iostream>
#include <string>
class Cat {
public:
// 成员变量
std::string name;
int age;
// 构造函数
Cat(std::string catName, int catAge) {
name = catName;
age = catAge;
}
// 成员函数
void displayInfo() {
std::cout << "Cat's name: " << name << std::endl;
std::cout << "Cat's age: " << age << " years old" << std::endl;
}
};
int main() {
// 创建一个 Cat 对象
Cat myCat("Whiskers", 3);
// 使用成员函数显示猫的信息
myCat.displayInfo();
return 0;
}