C数据类型创建
回答
但我不明白怎么Ç不能上课
,因为它不是严格意义上的面向对象的语言。
那么这是否意味着FILE是stdio.h文件中的结构?
是的。
数据类型如何在C中完全工作?
关于该主题(Google,第一击),有一个entire paper。
旁注:你可以在C使用结构模拟面向对象的编程风格,它只是看你是否不叫什么OO点的问题。例如,考虑臭名昭著的libcurl网络库的使用:写一些OOP,这样的代码
CURL *hndl = curl_easy_init();
curl_easy_setopt(hndl, CURLOPT_URL, "http://example.com");
curl_easy_perform(hndl);
curl_easy_cleanup(hndl);
这主要是冗长(明确):关于这个主题
CURL hndl;
hndl->url = "http://example.com";
hndl->perform();
该科目有多篇论文,但在提问之前没有读过一篇论文。 – Mithrandir
@Mithrandir当然我并不是说“这里只有一篇论文,这就是为什么你没有发现它到目前为止你已经完成的详尽的谷歌搜索”...... P: – 2012-11-14 19:22:32
我在C和C上的论文编程类型早于谷歌,实际上是写在纸上。但当然,这不再是相关的知识。 ;-) – Mithrandir
可以使用typedef
关键字创建类型C.我平时做这样的事情:
struct car_st {
int numberOfSeats;
};
typedef struct car_st CAR;
typedef struct car_st * CAR_PTR;
类似的东西。
其实C可以有类,类。我认为C++和Objective C的早期实现是用预处理器完成的。问题是你没有得到真正的数据隐藏和方法。你最终使用方法的函数指针 - 这既是一个维护噩梦,也是很多工作的设置。不知道你将如何做继承,但它可能会混乱指向其他结构。
所以,是的,你可以一起拍这样的东西。但请不要。
关于OO-C,请查看程序员SE上的[OO最佳实践](http://programmers.stackexchange.com/q/118253/1033)。 – mouviciel
C等价物将为Car
的属性定义一个结构类型,然后定义函数来操纵Car
类型的对象。这是本质的FILE
类型是如何工作的:
FILE *f = fopen("afile.txt", "r"); // open a file for reading
fgets(buffer, sizeof buffer, f); // read from a file
fprintf(f, "%d on the wall", bottles--); // write formatted text to the file
在任何时候,以我们直接操纵FILE
类型的对象;我们只是来回传递指针。
没有访问控制;你不能使C结构的某些部分public
和其他private
;你可以隐藏,像这样实现:
/** Car.h */
...
struct Car;
struct Car *createCar(void);
void deleteCar(struct Car **theCar);
int startCar(struct Car *theCar);
...
/** Car.c */
#include "Car.h"
...
struct Car {
char *make;
char *model;
int year;
...
};
struct Car *createCar(void)
{
struct Car *p = malloc(sizeof *p);
if (p)
{
... // initialize attributes
}
return p;
}
void deleteCar(struct Car **theCar)
{
free(*theCar);
*theCar = NULL;
}
void startCar(struct Car *theCar)
{
theCar->running = 1;
}
/** main.c */
#include "Car.h"
...
int main(void)
{
struct Car *c = createCar();
startCar(c);
...
deleteCar(&c);
}
在这个例子中,main.c
只看到向前声明struct Car;
在Car.h
;由于类型不完整,因此main
只能声明指针才能输入struct Car
。在Car.c
中,结构类型已完成,定义为struct Car {char *make; char *model; ...};
,因此Car.c
中的函数可以访问这些成员。
- 1. 创建自定义数据类型C++
- 2. 创建Set数据类型
- 3. 如何创建可以初始化C++数据类型的类?
- 4. 使用原始数据类型创建自定义类Obj-c
- 5. 创建未知类型的数组。 C#
- 6. C++模板:为特定数据类型创建专用函数
- 7. 在运行时创建数据类型
- 8. 创建正确的数据类型
- 9. SML:创建抽象数据类型
- 10. 如何创建数据子类型
- 11. 使用malloc创建数据类型()
- 12. Objective C - 根据类型创建基类的具体类实例
- 13. 用多种数据类型创建C++队列?
- 14. 如何正确创建数据类型为varchar的C#属性?
- 15. 创建链接列表的数据类型C++
- 16. C#创建一个数据库类
- 17. 数据类型模型C++
- 18. 如何在objective-c中的一个类中创建仅用于数据类型的数据类型?
- 19. 使用导入模块中的类型创建数据类型
- 20. 创建包创建包体记录数据类型
- 21. 根据类型标识创建类
- 22. 创建“类型”
- 23. 超类型/子类型:数据建模
- 24. 创建泛型类型依赖于其他类型的C#
- 25. 如何在C#创建这三个类泛型类或类型
- 26. 创建大型数据框
- 27. derby数据库中的位数据类型(在NetBeans中创建)
- 28. 如何在mysql数据库中创建TINYINT(1)数据类型?
- 29. 尝试使用C++类创建通用数据类型的问题
- 30. 在C++中创建简单类型
您的观点非常好 - 我同意你的意见 – paulsm4
维基百科的['typedef'](http://en.wikipedia.org/wiki/Typedef)是什么部分对你来说很模糊? – mouviciel
C有复合类型(“结构体”),但它们不能具有成员函数,因此它们不是OO意义上的“类”。他们只是复合类型。 –