类与对象(初识)

一、引言

在计算机编程的领域中,理解并应用类与对象的概念是迈向高级编程的重要一步。本文旨在带领读者初步认识面向过程和面向对象编程的区别,并探讨类的引入、定义、访问限定符及封装等核心概念。

二、面向过程和面向对象初步认识

1.面向过程编程

面向过程编程,也被称为结构化编程,是一种以过程为中心的编程思想。它关注的是解决问题的步骤,即算法。在面向过程编程中,程序由一系列函数或过程组成,这些函数或过程通过数据传递来协同工作,完成特定的任务。面向过程编程的优点在于其直观性和易于理解,但缺点是随着程序的复杂化,维护和修改代码将变得困难。

2.面向对象编程

面向对象编程(OOP)是一种以对象为基础的编程思想。它将现实世界的事物抽象为对象,并通过类和对象来实现对事物的描述和操作。在面向对象编程中,类是对象的模板,它定义了对象的属性和方法;而对象是类的实例,它拥有类的所有属性和方法,并可以根据需要进行修改和扩展。面向对象编程的优点在于其模块化和可重用性,使得代码更加易于维护和管理。

三、类的引入

类是面向对象编程的核心概念之一。在现实世界中,我们可以看到各种各样的事物,如人、车、动物等,这些事物都具有一些共同的属性和行为。在编程中,我们可以将这些事物抽象为类,并使用类来创建具有相同属性和行为的对象。通过引入类的概念,我们可以更加自然地描述现实世界中的事物,并使程序更加易于理解和维护。

四、类的定义

在面向对象编程中,类的定义通常包括以下几个部分:

  1. 类名:用于标识类的名称,通常采用有意义的命名方式,以便于理解和记忆。
  2. 属性:用于描述对象的特征或状态,通常包括数据成员和静态成员。数据成员是对象所特有的属性,而静态成员则是所有对象共有的属性。
  3. 方法:用于描述对象的行为或操作,通常包括成员函数和静态函数。成员函数是对象所特有的行为,而静态函数则是所有对象共有的行为。

下面是一个简单的C++类定义的示例:

class Person 
{
    public: // 访问限定符
    // 数据成员(属性)
    string name;
    int age;

    // 成员函数(方法)
    void display() 
    {
        cout << "Name: " << name << ", Age: " << age << endl;
    }

    // 构造函数
    Person(string n, int a) 
    {
        name = n;
        age = a;
    }

    private: // 另一个访问限定符
    // 私有数据成员,只能在类内部访问
    string id;
};

在上述示例中,我们定义了一个名为Person的类,它包含了nameage两个数据成员(属性),以及一个display成员函数(方法)。此外,我们还定义了一个构造函数,用于初始化对象的状态。注意,我们还使用了publicprivate两个访问限定符来限制成员的可访问性。

五、类的访问限定符及封装

1.访问限定符

在类的定义中,我们可以使用访问限定符来控制成员的可访问性。常见的访问限定符有publicprotectedprivate三种。

  • public:表示该成员是公开的,可以在任何地方被访问。
  • protected:表示该成员是受保护的,只能在类内部或派生类中被访问。
  • private:表示该成员是私有的,只能在类内部被访问。

通过使用访问限定符,我们可以实现对类的封装,即将类的内部实现细节隐藏起来,只对外提供必要的接口。这有助于提高代码的安全性和可维护性。

2.封装

封装是面向对象编程的三大特性之一(封装、继承、多态)。它通过将对象的属性和方法封装在一个类中,使得对象成为一个独立的实体。封装的好处在于它可以将对象的内部实现细节与外部使用隔离开来,降低了代码的耦合度,提高了代码的可重用性和可维护性。同时,封装还可以实现对对象的保护,防止外部程序对对象的内部数据进行非法访问或修改。

在上面的Person类示例中,我们使用了private访问限定符来将id数据成员隐藏起来,使其只能在类内部被访问。这样,外部程序就无法直接访问或修改id数据成员的值,从而保证了数据的安全性。同时,我们还通过提供display成员函数来允许外部程序获取nameage数据成员的值,实现了对对象的封装和接口提供。

六、对象的创建与使用

在面向对象编程中,类只是对象的蓝图或模板,而对象则是根据类创建的实例。要创建和使用对象,我们需要进行以下几个步骤:

1.创建对象

使用类名以及关键字(如C++中的new)来创建对象。这个过程也被称为实例化。

在C++中,创建Person类对象的示例如下:

Person person1("Alice", 25); // 调用构造函数创建对象

或者使用指针和new关键字:

Person* personPtr = new Person("Bob", 30); // 动态创建对象

2.问对象的属性和方法     

通过对象名(或指针)和点操作符(.)或箭头操作符(->)来访问对象的属性和方法。

cout << person1.name << ", " << person1.age << endl; // 访问对象的属性 
person1.display(); // 调用对象的方法 

cout << personPtr->name << ", " << personPtr->age << endl; // 使用指针访问对象的属性
personPtr->display(); // 使用指针调用对象的方法

3.对象的生命周期

对于使用new关键字动态创建的对象,需要使用delete关键字来释放内存,以避免内存泄漏。

delete personPtr; // 释放动态分配的内存

七、类的继承

继承是面向对象编程中的另一个重要特性。它允许我们创建一个新的类(派生类),继承一个或多个已存在的类(基类)的属性和方法。通过继承,我们可以实现代码的重用和扩展。

在C++中,使用冒号(:)和访问限定符(如public)来指定继承方式和基类。
 

class Employee : public Person 
{
    public:
    // 新增的属性和方法
    string department;
    double salary;

    void displayDetails() 
    {
        display(); // 调用基类的display方法
        cout << "Department: " << department << ", Salary: " << salary << endl;
    }
};

在上面的示例中,Employee类继承了Person类,并新增了departmentsalary两个属性,以及一个displayDetails方法。在displayDetails方法中,我们调用了基类Persondisplay方法,实现了代码的重用。

八、类的多态性

多态性是面向对象编程的第三大特性。它允许我们使用父类类型的引用或指针来引用子类对象,并在运行时根据对象的实际类型来调用相应的方法。这种机制被称为动态绑定或后期绑定。

在C++中,多态性通常通过虚函数和指针或引用来实现。当基类中的方法被声明为virtual时,它就可以在派生类中被重写(覆盖)。然后,我们可以通过基类类型的引用或指针来调用派生类对象的方法,实现多态性。

九、总结

本文深入探讨了面向对象编程中的类与对象的概念。首先,我们介绍了面向过程和面向对象编程的区别,以及类在面向对象编程中的重要性。接着,我们详细阐述了类的定义、访问限定符及封装的概念,并通过示例展示了如何定义和使用类。此外,我们还简要介绍了类的继承和多态性特性,以及它们在面向对象编程中的应用。通过本文的学习,读者可以初步掌握类与对象的基本概念和应用方法,为进一步学习面向对象编程打下坚实的基础。

  • 13
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值