C语言笔记18--C语言面向对象编程

C语言是一门面向过程的编程语言,里面没有类的说法,没有类的继承、封装、多态。Cpp是有类的概念的,Cpp本身就来源C语言,Cpp的类就是一个经过高度封装的C语言结构体。在学习Cpp之前,了解C语言的设计模式非常重要,今天就用C语言结构体进行简单的继承、封装、多态。

1.封装

面向对象编程,每个对象都有自己的封装的方法(函数),在C语言中,结构体内是不允许定义函数的,但我们可以定义一个函数指针,将这个指针指向我们定义的函数,实现调用函数的目的。

#include<stdio.h>
#include<stdlib.h>
//声明一个结构体
struct myclass
{
    void(*pfunc)();//声明一个函数指针
};
void printfinfo()
{
    printf("come from myclass");
}
void main()
{
    struct myclass my;
    my.pfunc=printfinfo;//函数名即是函数地址,让结构体的函数指针指向函数
    my.pfunc();//调用
    system("pause");
}

2.继承

C语言的结构体是允许嵌套结构体的,嵌套结构体就可以获得其他结构体的属性。

#include<stdio.h>
#include<stdlib.h>
//声明一个父类结构体
struct fatherclass
{
    int fatherdata;
    void(*pfa)();//函数指针
};
//子类结构体
struct childclass
{
    int childdata;//子类自己的属性
    struct fatherclass f;//在子类定义一个父类结构体
};
void printfinfo()
{
    printf("come from fatherclass");
}
void main()
{
    struct childclass mychild;
    mychild.childdata=20;
    mychild.f.fatherdata=30;//父类结构体的属性
    mychild.f.pfa=printfinfo;//子类结构体继承了指针函数
    printf("childdata=%d\n",mychild.childdata);
    printf("fatherdata=%d\n",mychild.f.fatherdata);
    mychild.f.pfa();//调用方法(函数)
    system("pause");
}

3.多态

多态是同一个接口,多种实现。简单来说就是一个函数接口,但用来干什么,取决于子类用来调用什么函数。在C语言中,我们可以在父类结构体定义一个空类型的函数指针,指向的函数取决于子类结构体。

#include<stdio.h>
#include<stdlib.h>
//父结构体
struct fatherclass
{
    void(*pf)();//函数指针
};
struct childclass 
{
    struct fatherclass f;//在结构体嵌套结构体,继承
};
//定义两个函数,供子类调用
void eat()
{
    printf("eat\n");
}
void run()
{
    printf("run\n");
}
void main()
{
    //定义两个子类
    struct childclass child1;
    struct childclass child2;
    child1.f.pf=eat;//子类1指向eat
    child2.f.pf=run;//子类2指向run
    //同一个接口,不同的实现
    child1.f.pf();
    child2.f.pf();
    system("pause");
}

这只是C语言的一些简单封装,主要是搞明白对象的设计模式。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值