C++ Primer Plus第十章笔记

目录

过程性编程和面向对象编程

类的概念

如何定义和实现类

类的构造函数和析构函数

const成员函数

this指针

对象数组

抽象数据类型

过程性编程和面向对象编程

        过程性编程是一种以过程或函数为基础的编程范式,它将问题划分成一系列步骤,通过处理这些步骤完成任务。在过程性编程中,数据和函数通常是分离的,而函数的输入和输出都是基于参数和返回值的。这种编程方式视图通过一系列有序的指令实现程序设计的目标。

        面向对象编程是一种以对象为基础的编程范式,它将问题划分为对象,并将数据和方法封装在对象之内。在面向对象编程中,对象是一种具有特定属性和行为的实体,可以与其他对象进行交互并组成更复杂的系统。

        过程性编程和面向对象编程各有其优点和缺点。过程性编程简单直观,易于理解和维护,但可扩展性有限。而面向对象编程更加灵活和可扩展,但需要更多的时间和精力来设计和实现。选择使用哪种编程方式应该根据具体的需求和问题进行评估。

类的概念

        类是面向对象编程中的一个核心概念,它是对一组具有相同属性和行为的对象的抽象描述。类描述了对象的特征和行为,并定义了对象所具有的属性和方法。

类通常包含以下三个部分:

1. 属性(或成员变量):描述对象的特征和状态。

2. 方法(或成员函数):描述对象的行为和操作。

3. 构造函数:创建类的实例或对象时执行的方法。

        类只是一个概念,它本身并不是一个具体的对象,只有通过创建对象才能使用类的属性和方法。通过类可以创建任意数量的对象,每个对象都具有相同的属性和方法,但它们的状态可以不同。

        类的定义可以包含访问修饰符(public、private、protected),用于控制类成员的访问权限。通常情况下,属性和方法都是 private 访问修饰符,只能在类内部访问。通过提供公共的 getter 和 setter 方法,才能在外部访问和修改类的属性。

如何定义和实现类

在面向对象编程语言中,定义和实现类的基本语法如下:

class 类名 {
    // 成员变量
    成员变量类型 成员变量名;

    // 构造函数
    public 类名() {
        // 初始化
    }

    // 成员函数
    访问修饰符 成员函数返回类型 成员函数名(参数列表) {
        // 函数体
    }
}
 

        其中,访问修饰符可以为 public、private 或 protected,用于控制成员变量和成员函数的访问权限。类名必须符合命名规范,成员变量和成员函数名也应该符合命名规范,以便于代码的维护。构造函数是一个特殊的成员函数,用于在创建对象时初始化它的成员变量。成员函数可以有任意数量的参数,可以返回任意类型的值或者不返回任何值。

相关文章:c++类和对象(封装)_const double pi = 3.14; using namespace std; //1、封-CSDN博客

类的构造函数和析构函数

        类的构造函数和析构函数是类中两个重要的函数,它们负责创建和销毁对象。

        构造函数是在对象创建时自动调用的函数,它负责初始化对象的成员变量和其他资源。构造函数的名称与类名相同,没有返回值类型,并且可以重载。通常情况下,构造函数是公有的,以便对象可以在类外部创建。如果没有定义任何构造函数,编译器会提供一个默认构造函数。

        析构函数是在对象销毁时自动调用的函数,它负责释放对象所占用的资源。析构函数的名称与类名相同,以“~”开头,没有返回值类型,并且不能重载。通常情况下,析构函数是公有的,以便对象可以在类外部销毁。

相关文章:构造函数和析构函数_析构函数返回值-CSDN博客

const成员函数

        C++中的const关键字除了可以用来声明常量外,还可以用来修饰成员函数和成员函数的参数。在成员函数后加上const关键字,可以将它声明为“常量成员函数”。常量成员函数有一个约束,即不能修改类的成员变量,只能读取成员变量的值,或者调用其他常量成员函数,但是可以修改指向非常量对象的指针或者引用。这个约束是通过隐含的this指针实现的。

        常量成员函数可以被常量对象和非常量对象调用,对常量对象的调用返回的也是常量对象,不能用于修改对象的状态。对于非常量对象的调用,返回的是非常量对象,可以用于修改对象的状态。

this指针

        C++中的this指针是一个隐含的指针,它指向当前对象,也就是调用该成员函数的对象。this指针是每个对象都有的,并且在成员函数内部是可见的,而且不能被修改。一般情况下,在成员函数内部使用this指针可以获取对象自身的地址或者调用其他成员函数,同时它也可以用于区分形参和成员变量名相同的情况。

示例:

#include 

class MyClass {
public:
    void setValue(int value) {
        this->value = value; // 使用this指针区分成员变量
    }

    void printValue() {
        std::cout << "Value: " << value << std::endl; // 直接访问成员变量
        std::cout << "Value using this pointer: " << this->value << std::endl; // 使用this指针访问成员变量
    }

private:
    int value;
};

int main() {
    MyClass obj;
    obj.setValue(5);
    obj.printValue();

    return 0;
}

在上述示例中,类MyClass有一个成员变量value和两个成员函数setValueprintValue

setValue函数使用了this指针来引用当前对象,并将传入的参数值赋给成员变量value

printValue函数中,我们在输出语句中直接访问成员变量value,以及使用this指针来访问成员变量value。这两种方式得到的结果是一样的。

main函数中,我们创建了一个MyClass对象obj,然后调用setValue将值设置为5。接着调用printValue函数,输出成员变量value的值,以及使用this指针输出成员变量value的值。

运行上述代码,你会看到输出结果如下:

Value: 5
Value using this pointer: 5

对象数组

        对象数组是指数组的每个元素都是同一类的对象。数组可以存储多个对象,每个对象都具有相同的数据类型和成员函数。通过数组的索引,可以访问和操作数组中的每个对象。

        对象数组可以用来存储和处理多个相关的对象,以便更方便地进行批量操作。例如,如果有一个学生类`Student`,可以创建一个学生对象数组来存储多个学生的信息。这样可以方便地对学生数组进行遍历、排序、搜索等操作。

        对象数组的创建方式与普通数组类似,使用类名定义数组,并指定数组的大小。每个数组元素都是类的对象,可以通过索引访问和操作每个对象的成员。

        对象数组提供了一种组织和管理多个对象的方式,使程序设计更加灵活和可扩展。通过对象数组,可以方便地处理大量相似对象的操作,提高代码的复用性和效率。

当要创建一个对象数组时,您需要先定义一个对象类型,并使用该类型来声明数组。以下是一些创建对象数组的示例代码:

  1. 使用字面量方式创建对象数组:
    // 定义一个对象类型
    class Person {
      String name;
      int age;
    }
    
    // 创建对象数组
    Person[] people = new Person[3];
    
    // 初始化数组的每个元素
    people[0] = new Person();
    people[0].name = "Alice";
    people[0].age = 25;
    
    people[1] = new Person();
    people[1].name = "Bob";
    people[1].age = 30;
    
    people[2] = new Person();
    people[2].name = "Carol";
    people[2].age = 35;

  2. 使用构造函数创建对象数组:
    // 定义一个对象类型
    class Car {
      String brand;
      int year;
      
      Car(String brand, int year) {
        this.brand = brand;
        this.year = year;
      }
    }
    
    // 创建对象数组并初始化
    Car[] cars = new Car[]{
      new Car("Toyota", 2015),
      new Car("Honda", 2018),
      new Car("Ford", 2020)
    };

抽象数据类型

        抽象数据类型 (Abstract Data Type, ADT) 是一种用于描述数据结构的概念模型,它不依赖于具体的编程语言实现,而是关注数据结构的逻辑特性和操作。ADT 提供了一组操作,通过这些操作可以对数据进行访问和操作,但具体的实现细节在使用该数据结构的时候可以被隐藏起来。

ADT 通常由两部分组成:

1. 抽象数据:也称为数据对象,是ADT中需要存储和操作的数据。

2. 数据操作:也称为操作集合,定义了对抽象数据进行处理的操作,包括获取、修改和组合等。

        ADT 的目的是通过定义抽象数据和操作,提供一种高层次的概念模型,使得程序开发者能够更加专注于问题的逻辑处理,而不需要关注具体的实现细节。在编程过程中,可以根据ADT的定义,选择适当的数据结构和算法来实现和操作数据。

        常见的抽象数据类型包括栈(Stack)、队列(Queue)、链表(Linked List)、堆(Heap)等。这些数据类型提供了一组操作,例如插入、删除、查找等,来满足不同场景下的需求。

        需要注意的是,抽象数据类型是一种逻辑上的概念模型,具体的实现可能会有所不同,不同的编程语言可能有不同的实现机制和语法。

总结:本文记录了C++ Primer Plus第十章笔记,主要是和类相关的知识点

你可能感兴趣的:(#,C++,Primer,Plus,c++,笔记,开发语言,1024程序员节)