gpt4 book ai didi

c - 不知道如何将 Java 类转换为 C 头文件和代码

转载 作者:行者123 更新时间:2023-11-30 18:23:53 25 4
gpt4 key购买 nike

我有以下 java 类:

class Rect {

int width;
int height;

Rect (int a, int b){
width = a;
height = b;
}

int area() {
return width * height;
}
}

但我不太确定如何将其转换为 C 代码。

到目前为止我有这个:

标题.h

#pragma once
struct rect {
int width, height;
};

int area();

标题.c

int area() {
//How do I access these?
//return width * height;
}

主要

#include "Header.h"

int main(int argc, char* argv[]) {
struct rect rect;

rect.height = 5;
rect.width = 10;

//How do I call rect.area() in here?
}

最佳答案

你不能在C中做到这一点,但是你可以用函数指针来模拟这个事情。创建一个函数指针,然后将函数区域分配给它。 (也许在某些初始化函数中)。但你还必须做很多事情才能清楚地模仿它。

例如,这里没有this的概念。因此,每次调用时,您都必须传递结构的地址。所以不确定这会有多大帮助。

struct rect {
int width, height;
int (*f_area)(struct rect *);
};

int area(struct rect *p){
return p->width*p->height;
}
<小时/>
/*
This function dynamically allocates struct rect and returns
its address
*/

struct rect * get_rect(){
...
rect->f_area = area;
return rect;
}
<小时/>

这样称呼

 int ar = rectvar->area(&rectvar);
<小时/>

但是现在你可能会说这真是愚蠢的事情。但是 C 并没有提供您所要求的东西。所以是的,就是这样。

当你扩展一种语言以获得不存在的功能时,事情就会变成这样。您可以像这样简单地使用区域功能 - 使您免于生活的一些困难。

struct rect rv;
rv.height = 10;
rv.width = 20;
int ar = area(&rv);

关于c - 不知道如何将 Java 类转换为 C 头文件和代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48211268/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com