กลับไปหน้าบทความ

อ่าน 2 นาที

ชั้นเรียนเสมือนจริง

ใน การเขียนโปรแกรมเชิงวัตถุ คลาส ฐานเสมือน เป็น คลาสภายใน ที่ซ้อนกัน ซึ่งฟังก์ชันและตัวแปรสมาชิกสามารถถูกเขียนทับและกำหนดใหม่โดย คลาสย่อย ของคลาสภายนอกได้ [ 1 ]...

ชั้นเรียนเสมือนจริง

ในการเขียนโปรแกรมเชิงวัตถุคลาสฐานเสมือนเป็นคลาสภายใน ที่ซ้อนกัน ซึ่งฟังก์ชันและตัวแปรสมาชิกสามารถถูกเขียนทับและกำหนดใหม่โดยคลาสย่อยของคลาสภายนอกได้[ 1 ]คลาสเสมือนนั้นคล้ายคลึงกับฟังก์ชันเสมือน

ประเภทขณะรันไทม์ของคลาสเสมือนจะขึ้นอยู่กับประเภทขณะรันไทม์ของอ็อบเจ็กต์ของคลาสภายนอก (เช่นเดียวกับที่ประเภทขณะรันไทม์ของอ็อบเจ็กต์เป็นตัวกำหนดว่าควรใช้ฟังก์ชันเสมือนใด)

ประเภทอินสแตนซ์ขณะรันไทม์ของอ็อบเจ็กต์คลาสภายนอกไม่เพียงแต่ตัดสินประเภทโพลีมอร์ฟิกของอ็อบเจ็กต์ประเภทของตัวเองเท่านั้น แต่ยังตัดสินลำดับชั้นของสมาชิกคลาสเสมือนทั้งหมดอีกด้วย

วัตถุประสงค์

คลาสเสมือนช่วยแก้ ปัญหา การขยายความสามารถในการขยายนามธรรมของข้อมูลด้วยฟังก์ชันและการแสดงแทนใหม่ เช่นเดียวกับฟังก์ชันเสมือน คลาสเสมือนปฏิบัติตามกฎเดียวกันของการกำหนด การเขียนทับ และการอ้างอิง[ 2 ]

เมื่อคลาสที่สืบทอดมาจากคลาสพื้นฐาน คลาสที่สืบทอดนั้นจะต้องกำหนดหรือเขียนทับคลาสเสมือนภายในที่สืบทอดมาจากคลาสพื้นฐาน อ็อบเจ็กต์ของคลาสลูกสามารถอ้างอิงได้ด้วยการอ้างอิงหรือตัวชี้ของประเภทคลาสแม่หรือประเภทคลาสลูก เมื่อการอ้างอิงหรือตัวชี้เรียกใช้คลาสเสมือนภายใน การใช้งานของคลาสที่สืบทอดจะถูกเรียกใช้หากอ็อบเจ็กต์นั้นเป็นประเภทคลาสที่สืบทอด ประเภทของคลาสภายนอกจะเป็นตัวกำหนดเวลาการทำงานของคลาสเสมือนภายใน

เมธอดที่มีอาร์กิวเมนต์เป็นอ็อบเจ็กต์จะสามารถเข้าถึงคลาสเสมือนของอ็อบเจ็กต์นั้นได้ เมธอดสามารถใช้คลาสเสมือนของอาร์กิวเมนต์เพื่อสร้างอินสแตนซ์และประกาศตัวแปรได้ คลาสเสมือนของอินสแตนซ์ที่แตกต่างกันจะไม่สามารถใช้งานร่วมกันได้

ตัวอย่าง

ตัวอย่างเช่น คลาสพื้นฐานMachineอาจมีคลาสเสมือนอยู่ภายใน คลาส Partsย่อยCarจะมีวิธีการใช้งานPartsที่แตกต่างจากคลาสพื้นฐานBicycleแต่โปรแกรมเมอร์สามารถเรียกเมธอดใดๆ ในคลาสเสมือนภายในนั้นPartsกับMachineอ็อบเจ็กต์ของคลาสใดๆ ก็ได้ และจะได้รับวิธีPartsการใช้งานของคลาสที่สืบทอดมานั้นโดยเฉพาะ

#include <iostream>คลาสMachine { public : void run () { }class Parts { public : virtual int get_wheels () = 0 ; virtual std :: string get_fuel_type () = 0 ; }; };// คลาสภายใน "Parts" ของคลาส "Machine" อาจส่งคืนจำนวนล้อที่เครื่องจักรมีclass Car : Machine { public : void run () { std :: cout << "รถกำลังทำงาน" << std :: endl ; } class Parts : Machine :: Parts { public : int get_wheels () override { std :: cout << "รถยนต์มี 4 ล้อ" << std :: endl ; return 4 ; } std :: string get_fuel_type () override { std :: cout << "รถยนต์ใช้น้ำมันเบนซินเป็นเชื้อเพลิง" << std :: endl ; return "gasoline" ; } }; };

สามารถเข้าถึง วัตถุใดๆ ของคลาสประเภทMachineเดียวกันได้ด้วยวิธีเดียวกัน โปรแกรมเมอร์สามารถสอบถามจำนวนล้อ (โดยการเรียกใช้เมธอดget_wheels()) โดยไม่จำเป็นต้องรู้ว่าเครื่องจักรนั้นเป็นประเภทใด มีล้อกี่ล้อ หรือเครื่องจักรประเภทต่างๆ ที่เป็นไปได้ทั้งหมด ฟังก์ชันต่างๆ เช่นget_fuel_type()สามารถเพิ่มเข้าไปในคลาสเสมือนได้Partsโดยคลาสที่สืบทอดCarมา

ดูเพิ่มเติม

  • อัลเทอร์, ฟิลิปป์; เครเมต, วินเซนต์ (2005) "ชั้นเรียนภายในและประเภทเสมือนจริง" (PDF) . Ecole Polytechnique Fédérale de Lausanne (EPFL) สวิตเซอร์แลนด์ ดึงข้อมูลเมื่อ2014-04-30 .
  • Ernst, Erik; Ostermann, Klaus; Cook, William R. (2006). "แคลคูลัสในชั้นเรียนเสมือนจริง" (PDF) . มหาวิทยาลัยอาร์ฮุส. สืบค้นเมื่อ30 กรกฎาคม 2550 .
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Virtual_class&oldid=1165573834 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ ชั้นเรียนเสมือนจริง

ใน การเขียนโปรแกรมเชิงวัตถุ คลาส ฐานเสมือน เป็น คลาสภายใน ที่ซ้อนกัน ซึ่งฟังก์ชันและตัวแปรสมาชิกสามารถถูกเขียนทับและกำหนดใหม่โดย คลาสย่อย ของคลาสภายนอกได้ [ 1 ]...

วัตถุประสงค์

คลาสเสมือนช่วยแก้ ปัญหา การขยายความสามารถ ในการขยายนามธรรมของข้อมูลด้วยฟังก์ชันและการแสดงแทนใหม่ เช่นเดียวกับฟังก์ชันเสมือน คลาสเสมือนปฏิบัติตามกฎเดียวกันของการกำหนด การเขียนทับ และการอ้างอิง [ 2 ]

ตัวอย่าง

ตัวอย่างเช่น คลาสพื้นฐาน Machine อาจมีคลาสเสมือนอยู่ภายใน คลาส Parts ย่อย Car จะมีวิธีการใช้งาน Parts ที่แตกต่างจากคลาสพื้นฐาน Bicycle แต่โปรแกรมเมอร์สามารถเรียกเมธอดใดๆ ในคลาสเสมือนภายในนั้น Parts กับ Machine อ็อบเจ็กต์ของคลาสใดๆ ก็ได้ และจะได้รับวิธี Parts...

ดูเพิ่มเติม

การสืบทอด (การเขียนโปรแกรมเชิงวัตถุ) วิชาเอก (วิทยาการคอมพิวเตอร์) มรดกเสมือนจริง ฟังก์ชันเสมือน