c - 面向对象的C - 结构中的变量+优点和缺点

标签 c oop data-structures modularity

我是一名年轻的学生,两年前学过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 是否真的实用。我是出于好奇才这么做的,这真的很有趣。你可以获得继承、虚拟基类、多态性等等。如果您有兴趣,可以在这里查看:

https://github.com/vladcc/object-oriented-c

关于c - 面向对象的C - 结构中的变量+优点和缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35407062/

相关文章:

c - 我的 Vigenere 加密程序中出现段错误

oop - 私有(private) 'property' 是 'field' 吗?

c - C 程序中位掩码的理解

python - 使用 CPython api 的生成器函数

c++ - C中double **和double (*)[2]的区别

java - 尽量减少类中的代码重复?

c++ - C 方法有时比 C++ 方法有优势吗?

algorithm - 有没有办法从更大的矩阵中匹配子矩阵?

data-structures - Mathematica中的条件数据合并

java - 为什么我们需要在二叉树子类中进行前序、中序和后序遍历的字段?