C의 OOP(데이터+기능+수신기 매개변수)
หวาว่าจะทำให้น้อง ๆฝึกงาน เข้าใจตัวแปร this ในจาวามากขึ้น
สมติว่ามีคลาสจาวาแบบนี้
//Java
class Dog{
int age;
void setAge(int age){ this.age = age; }
int getAge(){ return this.age; }
}
개념 นึงของ OOP คือการเอา 데이터 มารวมกับ 함수 เพื่อให้ เกิดเป็ 객체 ที่มีพฤติกรมแะเิิด สด็
ใน ใน ใน c ภาษา สามารถ ใช้ 구조물 เป็น ส่วน ส่วน ส่วน 데이터 ของ ออบ ออบ เจ็ค ได้ ได้ และ และ ถ้า หาก เรา เอา 함수 ใส่ ไป ใน ใน ใน เรา ก็ ได้ ได้ ได้ 데이터+동작 เหมือน จาวา จาวา
#include<stdio.h>
#include<stdlib.h>
// โครงสร้างข้อมูลที่จำลอง class ในจาวา มี age และ setter/getter
struct Dog{
int age;
void (*setAge)(struct Dog* this,int age);
int (*getAge)(struct Dog* this);
};
//อิมพลีเมนเตชั่นของเมธอด setAge
//สังเกตุว่าจะมีตัวแปร this เป็นพารามิเตอร์ตัวแรกของเมธอด (เราเรียกตัวแปร this ว่า receiver parameter)
//ซึ่งในจาวาเราไม่ระบุ receiver parameter แต่ว่า compiler จะเพิ่มให้เราเอง
void setAge(struct Dog* this,int age){
this->age = age;
}
// เหมือน setAge มี receiver parameter
int getAge(struct Dog* this){
return this->age;
}
//ฟังชั่นที่เอาไว้จำลองการ new Object() ในจาวา เพื่อให้ง่าย จะฟิกค่า new Dog() ไปเลย
struct Dog* new_operator_for_dog(){
struct Dog* d = (struct Dog*) malloc(sizeof(struct Dog));
//เอา function มาเป็นเมธอดของ object ด้วย function pointer
//เรียกว่าการ binding
d->setAge = setAge;
d->getAge = getAge;
return d;
}
int main(){
//Dog d = new Dog()
struct Dog* d = new_operator(sizeof(struct Dog));
// d.setAge(10)
d->setAge(d,10); //<-- สังเกตว่าเรา explicit receiver parameter เนื่องจากตรงนี้เราจำลองไม่ได้ใน C syntax
// d.getAge()
printf("%d\n",d->getAge(d));
// ใช้เสร็จต้อง free เพราะไม่มี GC
free(d);
}
Python ที่เวลาเรียก จะต้องระบุ 리버 매개변수
Reference
이 문제에 관하여(C의 OOP(데이터+기능+수신기 매개변수)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/pramoth/oop-in-c-datafunctionreceiver-parameter-5b3j텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)