C语言实现面对对象编程
2015-07-19 23:18
465 查看
#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;
#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;
相关文章推荐
- Valid Parentheses
- 局部动态变量可以作为返回值吗(C++/C#)
- Longest Common Prefix
- Palindrome Number
- C++中类的多继承
- String to Integer (atoi)
- Piggy-Bank
- Reverse Integer
- c++类定义和类实现
- Add Two Numbers
- c语言中位制
- Two Sum
- Reverse Linked List
- log4cpp 编译与使用
- C语言模拟鼠标事件
- C++ string操作(转载)
- 归并排序C++
- C++函数参数为数组时的解析
- c语言-遍历pci设备(1)io访问
- 搜狗2015 C++工程师笔试题