0
를 함수 포인터를 사용하는 구조 파라미터를 적용초기화하고 다음 코드 구조 부재로서
#include <stdio.h>
#include <stdlib.h>
typedef struct{
int a;
int b;
int (*func1)();
int (*func2)();
}STR_X2;
void init(STR_X2 self , int _a , int _b){
self.a = _a;
self.b = _b;
printf("Init a:%d, b:%d \n",self.a,self.b);
}
int multiply(STR_X2 self){
printf("Multiply a:%d, b:%d, res:%d\n",self.a,self.b,self.a*self.b);
return self.a*self.b;
}
int main(void) {
static STR_X2 val2;
val2.func1 = init;
val2.func2 = multiply;
printf("set values of a and b using init() function\n");
val2.func1(val2,3,5);
printf("result:%d\n",val2.func2(val2));
printf("\nset values of a and b directly\n");
val2.a=3;
val2.b = 5;
printf("result:%d\n",val2.func2(val2));
return EXIT_SUCCESS;
}
함수 포인터로서 두 멤버가 STR_X2
구조.
func1
는 파라미터a
및b
의init()
및 SES 값으로 설정된다.func2
가multiply()
로 설정하고 코드를 실행하여a
및b
을 곱되고, 나는 다음과 같은 결과가 : func1()
이 작동하지 않습니다 사용하여 매개 변수를 초기화하는 것을 의미
set values of a and b using init() function
Init a:3, b:5
Multiply a:0, b:0, res:0
result:0
set values of a and b directly
Multiply a:3, b:5, res:15
result:15
합니다.
아무도이 코드의 문제점을 찾아 내도록 도와 줄 수 있습니까?
감사합니다.
함수 매개 변수로 'STR_X2 *'를 사용해야하거나이 코드 중 어느 것도 전혀 의미가 없습니다. – Lundin
코드가 끔찍하게도 OOP의 가장 기본적인 규칙 인 개인 캡슐화에 위배됩니다. – Lundin
'int (* multiply) (int, int)')를 사용하지 않고'int (* func)()'를 사용하면 코드가 안전하지 않게됩니다. 나는 또한 "클래스 초기화"함수 ("init' 함수, 그러나 다르게 명명 된) 내에서"인스턴스 "를 초기화하는 것을 고려할 것이다. 또한 중첩 된 함수를'static'으로 만들 것입니다. 왜냐하면 파일 외부에서 액세스되지 않기 때문에 할당 된 객체를 통해서만 액세스해야하기 때문입니다. – Myst