我只需要在C中编码几次,而且每次我都这样做,它就变成了一些无法管理的野兽.
我已经在C#和.Net中完成了大部分的编程,因此我非常习惯于类风格的体系结构,但我似乎无法掌握C语言应用程序中的组织.我应该把函数定义放在一个文件中,将函数定义放在一个文件中,然后在另一个文件中处理,等等.这个主题有没有什么好的资源?
另请参阅:从面向对象的土地中挣扎?
任何人都可以指点我如何使用ANSI C实现工厂模式?如果覆盖更多的模式,那将只是一个奖励.在C++中这样做对我来说是微不足道的,但由于C没有类和多态,我不太清楚如何做到这一点.我正在考虑使用所有常见数据类型的"基础"结构,然后使用void指针,并按照与顶部基础结构相同的顺序定义结构的所有公共部分?或者不能保证它们在内存中以相同的方式结束?
我看到了在C11 中用匿名方法实现某种struct继承的方法struct,并想尝试一下。这是我所拥有的:
struct struct_a {
int aa;
};
struct struct_b {
struct struct_a;
int bb;
};
int main(void)
{
volatile struct struct_b my_b;
my_b.aa = 5; /* not a member of my_b */
my_b.bb = 6;
}
Run Code Online (Sandbox Code Playgroud)
来自gcc的结果:
$ gcc -std=c11 struct_extend.c
struct_extend.c:11:20: warning: declaration does not declare anything
struct struct_a;
^
struct_extend.c: In function ‘main’:
struct_extend.c:18:9: error: ‘volatile struct struct_b’ has no member named ‘aa’
my_b.aa = 5; /* not a member of …Run Code Online (Sandbox Code Playgroud) 我读到早期的C++"编译器"实际上将C++代码翻译成C并在后端使用了C编译器,这让我很奇怪.我已经掌握了足够的技术知识来解决大部分工作原理,但我无法弄清楚如何在没有语言支持的情况下进行类继承.
具体来说,如何定义一个包含几个字段的类,然后是一堆继承自它的子类,每个子类都添加自己的新字段,并能够作为函数参数交替传递它们?特别是当C++允许你在堆栈上分配对象时,你怎么能这样做呢?所以你甚至可能没有指向隐藏的指针?
注意:我得到的前几个答案是关于多态性的.我知道关于多态和虚方法的一切.我甚至曾经做过一次关于Delphi中虚拟方法表如何工作的低级细节的会议演示.我想知道的是类继承和字段,而不是多态.
可能重复:
你能用C编写面向对象的代码吗?
我想知道是否可以使用严格的ANSI C作为面向对象的语言.如果可能,我如何在ANSI C中创建一个类.虽然该语言不是为OO设计的,但我真的很想尝试这个.
任何例子,链接等都是值得赞赏的.
假设我在C中有以下代码表示堆栈:
#define MAX 1000
int arr[MAX];
static int counter = 0;
isstackempty()
{
return counter <= 0;
}
void push(int n)
{
if (counter >= MAX) {
printf("Stack is full. Couldn't push %d", n);
return;
}
arr[counter++] = n;
}
int pop(int* n)
{
if(isstackempty() || n == 0) {
printf("Stack is empty\n");
return 0;
}
*n = arr[--counter];
return 1;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码在一个stack.c文件中,函数原型在一个头文件中.
现在,来自C#和OO背景,如果我想要stack在我的应用程序中分离s,在OO语言中我将创建两个实例.但是在C中,你如何处理这种情况?
假设我想stack在我的C代码中使用两个单独的s ...使用上面的代码,我将如何处理它?