我是一名年轻的学生,两年前学过C。我刚刚发现了更复杂的东西,比如面向对象的 C。
我的第一个问题是:
1) 如何访问变量?目标是根据已实例化的结构为这些变量提供特定值。 所以我想要这样的东西:
myStruct* myStrPtr;
myStruct2* myStrPtr;
myStrPtr = initializeStruct();
myStrPtr->printContent //prints for example 55
myStrPtr2 = initializeStruct();
myStrPtr2->printContent //prints for example 6548
示例
typedef struct {
void (*sum)(int a, int b);
void (*printContent)(void);
int content;
}myStruct;
void printInhoud(void){
printf("content: %d\n", content);}
void sum(int a, int b){
/***********THIS DOESN T WORK OBVIOUSLY************/
this->content = a+b;
printf("calculated sum: %d", sum);
}
myStruct * initializeStruct(void)
{
myStruct* myStrPtr = malloc(sizeof(myStruct));
myStrPtr -> foo = foo ;
mynStrPtr->printContent = printContent;
return myStrPtr;
}
void freeMem(myStruct * myStructPtr)
{
free(myStructPtr);
}
int main (void)
{
int a= 1;
int b=33;
myStruct* myStrPtr;
myStrPtr = initializeStruct();
myStrPtr->printContent();
return 0;
}
2)我的第二个问题是:以这种方式编程的优点和缺点是什么?我认为,如果我能够在结构中添加变量并像在 OOP 中一样访问它们,我将获得一个很大的优势:模块化。我活跃于嵌入式软件领域,并且相信在嵌入式系统上拥有 OOP 的这种优势会非常有趣。我因尝试这样做而受到批评。我得到的唯一原因是:“你没有垃圾收集器,所以不要”。有人可以给我一些优点和缺点,并解释为什么这将是“如此糟糕的编程实践”
最佳答案
您可以在 C 中进行 OOP,但主要缺点之一是您必须传递 this 指针。假设您的结构中有一个指向 printInfo() 函数的指针,并且您想要打印该特定结构的信息。你必须做
my_struct->printInfo(my_struct);
或者,如果 my_struct 不是指向您的结构的指针
my_struct.printInfo(&my_struct);
没有办法解决这个问题。
对于你的第二个问题,我不确定用 C 语言进行 OOP 是否真的实用。我是出于好奇才这么做的,这真的很有趣。你可以获得继承、虚拟基类、多态性等等。如果您有兴趣,可以在这里查看:
关于c - 面向对象的C - 结构中的变量+优点和缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35407062/