OOP In C
来源:互联网 发布:淘宝联盟用店铺红包 编辑:程序博客网 时间:2024/06/16 01:52
OOP In C
http://stackoverflow.com/questions/1403890/how-do-you-implement-a-class-in-c
How do you implement a class in C?
date_client.c
#include "date.h"#include <stdio.h>#include <assert.h>void TestDate(Date* date, int after, int before) { printf("Year: %d\n", GetYear(date)); printf("Month: %d\n", GetMonth(date)); printf("Day: %d\n", GetDay(date)); char* date_string = GetDateString(date); printf("Formatted: %s\n", date_string); DestroyDateString(&date_string); assert(date_string == NULL); DestroyDateString(&date_string); IncreaseDate(date); date_string = GetDateString(date); printf("1 day later: %s\n", date_string); DestroyDateString(&date_string); int i; for (i = 0; i < after; ++i) { IncreaseDate(date); } date_string = GetDateString(date); printf("Another %d day(s) later: %s\n", after, date_string); DestroyDateString(&date_string); for (i = 0; i < before; ++i) { DecreaseDate(date); } date_string = GetDateString(date); printf("Another %d day(s) earlier: %s\n", before, date_string); DestroyDateString(&date_string); }int main() { int year, month, day; int after, before; scanf("%d%d%d%d%d", &year, &month, &day, &after, &before); Date* date1 = CreateDate(year, month, day); assert(sizeof(*date1) == sizeof(Date)); Date* date2 = CopyDate(date1); assert(date1 != date2); assert(date1->month == date2->month); SetDate(date1, year + 1, month, day); SetYear(date1, year); SetMonth(date1, month); SetDay(date1, day); TestDate(date1, after, before); DestroyDate(&date1); DestroyDate(&date2); assert(date1 == NULL); DestroyDate(&date2); return 0;}/*One probable test case:1900 2 28 365 366Year: 1900Month: 2Day: 28Formatted: 1900-02-281 day later: 1900-03-01Another 365 day(s) later: 1901-03-01Another 366 day(s) earlier: 1900-02-28*/
date.h
#ifndef DATE_H_#define DATE_H_typedef struct { int year, month, day;} Date;Date* CreateDate(int year, int month, int day);void DestroyDate(Date** p);Date* CopyDate(const Date* date);int GetYear(const Date* date);int GetMonth(const Date* date);int GetDay(const Date* date);void SetYear(Date* date, int year);void SetMonth(Date* date, int month);void SetDay(Date* date, int day);void SetDate(Date* date, int year, int month, int day);char* GetDateString(const Date* date);void DestroyDateString(char** p);void IncreaseDate(Date* date);void DecreaseDate(Date* date);#endif
date.c*
#include "date.h"#include <stdio.h>#include <stdlib.h>Date* CreateDate(int year, int month, int day){ Date* date = (Date*)malloc(sizeof(Date)); date->year = year; date->month = month; date->day = day; return date;}int daysOfMonth(int year, int month) { if (month == 2) { if (year%4 == 0 && year%100 != 0 || year%400 == 0) return 29; else return 28; } else if (month == 4||month == 6||month == 9||month == 11) return 30; return 31;}void DestroyDate(Date** p){ free(*p); *p = NULL;}Date* CopyDate(const Date* date){ Date* date1 = (Date*)malloc(sizeof(Date)); date1->year = date->year ; date1->month = date->month ; date1->day = date->day ; return date1;}int GetYear(const Date* date){ int year1 = date->year; return year1;}int GetMonth(const Date* date){ int month1 = date->month; return month1;}int GetDay(const Date* date){ int day1 = date->day; return day1;}void SetYear(Date* date, int year){date->year = year;}void SetMonth(Date* date, int month){date->month = month;}void SetDay(Date* date, int day){date->day = day;}void SetDate(Date* date, int year, int month, int day){ date->year = year; date->month = month; date->day = day;}char* GetDateString(const Date* date){ char * dateString = (char*)malloc(11); sprintf(dateString,"%04d-%02d-%02d",date->year,date->month,date->day); return dateString;}void DestroyDateString(char** p){ free(*p); *p = NULL;}void IncreaseDate(Date* date){ if (date->day < daysOfMonth(date->year,date->month)) date->day++; else { if (date->month == 12) { date->year++; date->month = 1; } else date->month++; date->day = 1; }}void DecreaseDate(Date* date){ if (date->day > 1) date->day--; else { if (date->month == 1) { date->year--; date->month = 12; } else date->month--; date->day = daysOfMonth(date->year,date->month); }}
//注意指针的内存分配及释放
0 0
- OOP In C
- 1641 OOP in C (Date class)
- c#-oop
- C++.OOP
- OOP in JS
- OOP in Javascript(1)
- OOP in Javascript(2)
- OOP in Javascript(3)
- OOP in Javascript(4)
- Basic OOP in Python
- OOP in python DEMO
- OOP之多态 【C#】
- C++/OOP 大系
- OOP之封装 【C#】
- C++/OOP 大系
- OOP之封装 【C#】
- C++/OOP 大系
- 【C++/OOP】(侯捷著)
- Servlet(二)
- Es官方文档整理-2.分片内部原理
- C++第一节
- 更新失败(错误:3)检谷歌浏览器 查更新时出错:无法启动更新检查(错误代码为 3: 0x80040154)。
- 内网打洞技术:花生棒解决无固定IP地址网络环境
- OOP In C
- SpringMVC从Controller跳转到另一个Controller
- 把数组中的数拼接起来,求最大值(最小值)
- Es官方文档整理-3.Doc Values和FieldData
- iOS第三方库-魔窗Mlink的坑
- 安卓版本的cocos2dx编译
- C#中双问号(??)语法
- 解决使用junit测试时,无法加载redisCache的问题
- 获取Device Name方法