Python学习——Python 与 C 语法对比7(类、结构体)

承接上篇:

Python学习——Python 与 C 语法对比1(输出、注释、运算符、数字型)-CSDN博客

Python学习——Python 与 C 语法对比2(非数字型)-CSDN博客

Python学习——Python 与 C 语法对比3(条件控制)-CSDN博客

Python学习——Python 与 C 语法对比4(循环)-CSDN博客

Python学习——Python 与 C 语法对比5(函数)-CSDN博客

Python学习——Python 与 C 语法对比6(输入输出)-CSDN博客

类(C中使用结构体实现)

C语言本身并不直接支持类的概念,类是面向对象编程(OOP)的一个特性,而C语言是一种过程式编程语言。然而,可以通过C语言中的结构体(struct)和函数指针来模拟一些类似类的行为。

在C++中,类是一个更为重要且核心的概念,因为C++是一种支持面向对象编程的语言。C++中的类可以是数据成员和函数的组合,提供了封装、继承、多态等OOP特性。

总结来说,C语言没有内置的类概念,但可以通过结构体和函数指针来模拟一些类的特性。如果需要使用类和面向对象编程,可以考虑使用C++或其他支持OOP的语言。

语法PythonC
类定义class ClassName:struct ClassName {
构造函数def __init__(self, ...):void init_function(struct ClassName *self, ...) {
成员变量访问self.variableself->variable
成员函数调用self.method()method_function(&self);
继承class DerivedClass(BaseClass):struct DerivedClass extends BaseClass {
多态使用类型,无需显式声明基类和派生类的关系C语言没有多态的概念,只能通过结构体和函数指针来模拟
实例化对象obj = ClassName()ClassName *obj = (ClassName *)malloc(sizeof(ClassName));
析构函数def __del__(self):void deinit_function(struct ClassName *self) {

举例说明:

Python:

class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        pass

class Dog(Animal):
    def speak(self):
        return "Woof!"

class Cat(Animal):
    def speak(self):
        return "Meow!"

dog = Dog("Buddy")
cat = Cat("Kitty")

print(dog.speak())  # 输出 "Woof!"
print(cat.speak())  # 输出 "Meow!"

C:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct Animal {
    char *name;
    void (*speak)(struct Animal *);
} Animal;

void animal_speak(Animal *animal) {
    printf("%s\n", animal->name);
}

typedef struct Dog {
    Animal base;
} Dog;

void dog_speak(Animal *animal) {
    printf("Woof!\n");
}

typedef struct Cat {
    Animal base;
} Cat;

void cat_speak(Animal *animal) {
    printf("Meow!\n");
}

Dog *create_dog(const char *name) {
    Dog *dog = (Dog *)malloc(sizeof(Dog));
    dog->base.name = strdup(name);
    dog->base.speak = dog_speak;
    return dog;
}

Cat *create_cat(const char *name) {
    Cat *cat = (Cat *)malloc(sizeof(Cat));
    cat->base.name = strdup(name);
    cat->base.speak = cat_speak;
    return cat;
}

int main() {
    Dog *dog = create_dog("Buddy");
    Cat *cat = create_cat("Kitty");

    dog->base.speak(&dog->base);  // 输出 "Woof!"
    cat->base.speak(&cat->base);  // 输出 "Meow!"

    free(dog->base.name);
    free(cat->base.name);
    free(dog);
    free(cat);
    return 0;
}

例子中,定义了一个基类Animal,它有一个成员变量name和一个成员函数speak

然后定义了两个派生类DogCat,它们分别重写了speak函数。

在Python中,可以直接调用speak方法,而在C语言中,需要通过结构体中的函数指针来调用相应的函数。

此外,C语言中使用malloc进行内存分配,并在程序结束时释放内存。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值