📜  oops 中的类 - C 编程语言(1)

📅  最后修改于: 2023-12-03 15:03:22.636000             🧑  作者: Mango

Oops 中的类 - C 编程语言

在 C 语言中,没有原生的类和对象的概念。但是,我们可以使用结构体和函数来实现类和对象的一些基本特性。这种实现方式被称为 OOPS (Object Oriented Programming in C Language)。在本文中,我们将学习如何使用结构体和函数来创建类和对象。

声明类

在 C 语言中创建类时,我们使用结构体来定义其属性和方法。下面是一个示例类的声明:

// 定义一个结构体作为类
struct Person {
   char name[50];
   int age;
    
   // 方法定义
   void (*display)(struct Person*);
   void (*setName)(struct Person*,char*);
   void (*setAge)(struct Person*,int);
};

上述代码中,我们定义了一个名为“Person”的结构体,它有两个属性:名称(字符串)和年龄(整数)。此外,我们还定义了三个函数指针,这些函数指针表示该类的方法。

定义方法

接下来,我们将实现上面声明的三个方法。

// 显示信息
void display(struct Person* p) {
    printf("Name: %s\n", p->name);
    printf("Age: %d\n", p->age);
}
  
// 设置名称
void setName(struct Person* p, char* name) {
    strcpy(p->name, name);
}
  
// 设置年龄
void setAge(struct Person* p, int age) {
    p->age = age;
}

这些方法都是使用指向该类的对象的指针定义的。

创建对象

创建类的对象时,我们需要为其分配内存空间,以便存储其属性和方法。我们可以使用 malloc() 函数分配内存空间,如下所示:

// 创建对象
struct Person* createPerson() {
    struct Person* p = (struct Person*) malloc(sizeof(struct Person));
    p->display = &display;
    p->setName = &setName;
    p->setAge = &setAge;
    return p;
}

注意,我们将类的方法与其对象关联起来。这使得我们可以使用对象调用这些方法

调用类的方法

调用方法是通过对象指针执行的。如下所示:

int main() {
    // 创建对象
    struct Person* person1 = createPerson();
    struct Person* person2 = createPerson();
    
    // 设置属性
    person1->setName(person1, "Adam");
    person1->setAge(person1, 22);
    person2->setName(person2, "Bob");
    person2->setAge(person2, 25);
    
    // 调用方法
    person1->display(person1);
    person2->display(person2);
    
    // 释放内存
    free(person1);
    free(person2);
}

在上面的代码中,我们使用 createPerson() 函数创建了两个 Person 对象 person1 和 person2,并设置了它们的属性(名称和年龄)。然后,我们通过调用 display() 方法显示了这些对象的属性。最后,我们释放了所有分配的内存。

总结

在 C 编程语言中创建类和对象需要使用结构体和函数指针。虽然这种方式比使用原生类和对象要麻烦一些,但它可以在 C 语言中获得一些面向对象编程的特性。