C语言实现面对对象编程

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define NEW(x) (x *)malloc(sizeof(x))
#define NAMESIZE 30
#define SEXSIZE 2
#define AGESIZE 4
typedef struct _STUDENT{
    //Attributes
    char name[NAMESIZE];
    char sex[SEXSIZE];
    char age[AGESIZE];
    //Method
    char * (*getName)(struct _STUDENT *student);
    int (*getSex)(struct _STUDENT *student);
    int (*getAge)(struct _STUDENT *student);
    void * (*setName)(struct _STUDENT *student,char *name);
    void (*setSex)(struct _STUDENT *student,int sex);
    void (*setAge)(struct _STUDENT *student,int age);
}STUDENT,*LPSTUDENT;

void InitStudent(LPSTUDENT student);
char *getName(LPSTUDENT student);
int getSex(LPSTUDENT student);
int getAge(LPSTUDENT student);
void setName(LPSTUDENT student,char *name);
void setSex(LPSTUDENT student,int sex);
void setAge(LPSTUDENT student,int age);
int main(void)
{
    LPSTUDENT student = NEW(STUDENT);
    InitStudent(student);
    student->setName(student,"aaa");
    student->setAge(student,19);
    student->setSex(student,1);
    printf("Name:%s\n",student->getName(student));
    printf("Age:%d\n",student->getAge(student));
    printf("Sex:%s\n",student->getSex(student)==0?"Women":"Man");
    return 0;
}

void InitStudent(LPSTUDENT student)
{
    memset(student->name,0,sizeof(char)*NAMESIZE);
    memset(student->sex,0,sizeof(char)*SEXSIZE);
    memset(student->age,0,sizeof(char)*AGESIZE);
    student->getName = getName;
    student->getAge = getAge;
    student->getSex = getSex;
    student->setName = setName;
    student->setSex = setSex;
    student->setAge = setAge;
    return;
}

char *getName(LPSTUDENT student)
{
    char *name = (char *)malloc(sizeof(char)*NAMESIZE);
    strcpy(name,student->name);
    return name;
}
int getSex(LPSTUDENT student)
{

    if (student->sex[0] == '0')
    {
        return 0;
    }
    else
    {
        return 1;
    }
}

int getAge(LPSTUDENT student)
{
    return atoi(student->age);
}

void setName(LPSTUDENT student,char *name)
{
    strcpy(student->name,name);
    return;
}

void setAge(LPSTUDENT student,int age)
{
    char Age[AGESIZE];
    itoa(age,Age,10);
    strcpy(student->age,Age);
    return;
}
void setSex(LPSTUDENT student,int sex)
{
    char Sex[SEXSIZE];
    itoa(sex,Sex,10);
    strcpy(student->sex,Sex);
    return;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值