C의 OOP(데이터+기능+수신기 매개변수)

6532 단어
ใน ใน ใน ความ บท จะ จะ ยก ว่า ว่า ว่า 객체 ใน ภาษา ภาษา อย่าง อย่าง อย่าง อย่าง java ถูก อิมพลีเมนต์ ยัง ใง ใง ถ้า เขียน ด้วย ด้วย ด้วย เรา จะ แปร แปร แปร แปร แปร การ เอา เอา เอา เอา เอา เอา เอา ไป ไป เป็น ส่วน หนึ่ง ของ ของ เท่า เท่า เท่า เท่า เท่า เท่า หนึ่ง ส่วน ส่วน
หวาว่าจะทำให้น้อง ๆฝึกงาน เข้าใจตัวแปร 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 ที่เวลาเรียก จะต้องระบุ 리버 매개변수

좋은 웹페이지 즐겨찾기