คำถามติดแท็ก polymorphism

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

3
GetType () จะส่งคืนชนิดที่ได้รับมากที่สุดเมื่อเรียกจากคลาสฐานหรือไม่?
GetType () จะส่งคืนชนิดที่ได้รับมากที่สุดเมื่อเรียกจากคลาสฐานหรือไม่? ตัวอย่าง: public abstract class A { private Type GetInfo() { return System.Attribute.GetCustomAttributes(this.GetType()); } } public class B : A { //Fields here have some custom attributes added to them } หรือฉันควรสร้างวิธีนามธรรมที่คลาสที่ได้รับจะต้องนำไปใช้ดังต่อไปนี้? public abstract class A { protected abstract Type GetSubType(); private Type GetInfo() { return System.Attribute.GetCustomAttributes(GetSubType()); } …


6
จุดประสงค์ของ Rank2Types คืออะไร?
ฉันไม่ค่อยเชี่ยวชาญเรื่อง Haskell ดังนั้นนี่อาจเป็นคำถามที่ง่ายมาก Rank2Typesแก้ข้อ จำกัด ด้านภาษาอะไรบ้าง? ฟังก์ชั่นใน Haskell ไม่รองรับอาร์กิวเมนต์ polymorphic แล้วหรือ?

12
ฟังก์ชันเสมือนจริงและ vtable ใช้งานอย่างไร
เราทุกคนรู้ว่าฟังก์ชันเสมือนจริงคืออะไรใน C ++ แต่จะใช้งานในระดับลึกได้อย่างไร vtable สามารถแก้ไขหรือเข้าถึงได้โดยตรงที่รันไทม์? vtable มีอยู่สำหรับทุกคลาสหรือเฉพาะที่มีฟังก์ชันเสมือนอย่างน้อยหนึ่งฟังก์ชัน? คลาสนามธรรมมีค่า NULL สำหรับตัวชี้ฟังก์ชันอย่างน้อยหนึ่งรายการหรือไม่? การมีฟังก์ชันเสมือนเดียวทำให้ทั้งชั้นเรียนช้าลงหรือไม่? หรือเฉพาะการเรียกใช้ฟังก์ชันที่เสมือนจริง? และความเร็วจะได้รับผลกระทบหรือไม่หากฟังก์ชันเสมือนถูกเขียนทับจริงหรือไม่หรือจะไม่มีผลตราบใดที่เป็นเสมือน

8
ข้อขัดข้อง "การเรียกฟังก์ชันเสมือนจริง" มาจากไหน
บางครั้งฉันสังเกตเห็นโปรแกรมที่ขัดข้องในคอมพิวเตอร์ของฉันโดยมีข้อผิดพลาด: "pure virtual function call" โปรแกรมเหล่านี้จะคอมไพล์ได้อย่างไรเมื่อวัตถุไม่สามารถสร้างคลาสนามธรรมได้

7
เหตุใดจึงนิยมใช้ 'ความแตกต่างแบบบริสุทธิ์' มากกว่าการใช้ RTTI
ทรัพยากร C ++ เกือบทั้งหมดที่ฉันเคยเห็นที่พูดถึงเรื่องประเภทนี้บอกฉันว่าฉันควรใช้วิธีการหลายรูปแบบในการใช้ RTTI (การระบุประเภทรันไทม์) โดยทั่วไปแล้วฉันให้คำแนะนำแบบนี้อย่างจริงจังและจะพยายามทำความเข้าใจกับเหตุผล - ท้ายที่สุด C ++ เป็นสัตว์ร้ายที่ยิ่งใหญ่และยากที่จะเข้าใจในเชิงลึกทั้งหมด อย่างไรก็ตามสำหรับคำถามเฉพาะนี้ฉันกำลังวาดภาพว่างและต้องการดูว่าอินเทอร์เน็ตสามารถให้คำแนะนำประเภทใดได้บ้าง ก่อนอื่นให้ฉันสรุปสิ่งที่ฉันได้เรียนรู้จนถึงตอนนี้โดยระบุสาเหตุทั่วไปที่อ้างว่าทำไม RTTI จึง "ถือว่าเป็นอันตราย": คอมไพเลอร์บางตัวไม่ใช้มัน / RTTI ไม่ได้เปิดใช้งานเสมอไป ฉันไม่ซื้อข้อโต้แย้งนี้จริงๆ เหมือนกับการบอกว่าฉันไม่ควรใช้ฟีเจอร์ C ++ 14 เพราะมีคอมไพเลอร์ที่ไม่รองรับ แต่ก็ไม่มีใครกีดกันฉันจากการใช้คุณสมบัติ C ++ 14 โครงการส่วนใหญ่จะมีอิทธิพลเหนือคอมไพเลอร์ที่ใช้และวิธีกำหนดค่า แม้แต่การอ้างถึง manpage gcc: -fno-rtti ปิดใช้งานการสร้างข้อมูลเกี่ยวกับทุกคลาสด้วยฟังก์ชันเสมือนสำหรับใช้โดยคุณลักษณะการระบุชนิดรันไทม์ C ++ (dynamic_cast และ typeid) หากคุณไม่ได้ใช้ส่วนเหล่านั้นของภาษาคุณสามารถประหยัดพื้นที่ได้โดยใช้แฟล็กนี้ โปรดทราบว่าการจัดการข้อยกเว้นจะใช้ข้อมูลเดียวกัน แต่ G ++ สร้างขึ้นตามความจำเป็น ยังคงใช้ตัวดำเนินการ dynamic_cast …
106 c++  polymorphism  rtti 

9
ความแตกต่างกับ gson
ฉันมีปัญหาในการแยกสตริง json กับ Gson ฉันได้รับคำสั่งมากมาย คำสั่งสามารถเริ่มต้นหยุดคำสั่งประเภทอื่น ๆ โดยปกติฉันมีความหลากหลายและคำสั่ง start / stop สืบทอดจากคำสั่ง ฉันจะทำให้เป็นอนุกรมกลับไปยังวัตถุคำสั่งที่ถูกต้องโดยใช้ gson ได้อย่างไร ดูเหมือนว่าฉันได้รับเฉพาะประเภทพื้นฐานนั่นคือประเภทที่ประกาศและไม่เคยเป็นประเภทรันไทม์

4
เรียกใช้แอปพลิเคชันใน GDB จนกว่าจะมีข้อยกเว้นเกิดขึ้น
ฉันกำลังทำงานกับแอพพลิเคชั่นมัลติเธรดและต้องการดีบักโดยใช้ GDB ปัญหาคือหนึ่งในเธรดของฉันยังคงตายด้วยข้อความ: pure virtual method called terminate called without an active exception Abort ฉันรู้สาเหตุของข้อความนั้น แต่ฉันไม่รู้ว่ามันเกิดขึ้นที่ไหนในชุดข้อความ backtrace จะเป็นประโยชน์จริงๆ เมื่อฉันเรียกใช้แอปใน GDB แอปจะหยุดชั่วคราวทุกครั้งที่เธรดถูกระงับหรือกลับมาทำงานต่อ ฉันต้องการให้แอปของฉันทำงานต่อไปตามปกติจนกว่าเธรดใดเธรดหนึ่งจะตายโดยมีข้อยกเว้นนั้นเมื่อถึงจุดนั้นทุกอย่างควรหยุดเพื่อที่ฉันจะได้รับการย้อนกลับ

8
การหลีกเลี่ยงอินสแตนซ์ของ Java
การมีห่วงโซ่ของการดำเนินการ "instanceof" ถือเป็น "กลิ่นรหัส" คำตอบมาตรฐานคือ "ใช้ความหลากหลาย" ฉันจะทำอย่างไรในกรณีนี้? มีคลาสย่อยจำนวนหนึ่งของคลาสพื้นฐาน ไม่มีใครอยู่ภายใต้การควบคุมของฉัน สถานการณ์ที่คล้ายคลึงกันจะเป็นกับคลาส Java Integer, Double, BigDecimal เป็นต้น if (obj instanceof Integer) {NumberStuff.handle((Integer)obj);} else if (obj instanceof BigDecimal) {BigDecimalStuff.handle((BigDecimal)obj);} else if (obj instanceof Double) {DoubleStuff.handle((Double)obj);} ฉันสามารถควบคุม NumberStuff และอื่น ๆ ได้ ฉันไม่ต้องการใช้โค้ดหลายบรรทัดโดยที่ไม่กี่บรรทัดจะทำได้ (บางครั้งฉันทำแผนที่ HashMap Integer.class กับอินสแตนซ์ของ IntegerStuff, BigDecimal.class ไปยังอินสแตนซ์ของ BigDecimalStuff เป็นต้น แต่วันนี้ฉันต้องการสิ่งที่ง่ายกว่านี้) ฉันต้องการอะไรง่ายๆดังนี้: public …

6
Polymorphism ใน Javascript คืออะไร?
ผมได้อ่านบทความที่เป็นไปได้บางอย่างที่ฉันสามารถพบได้บนอินเทอร์เน็ตในหลายรูปแบบ แต่ฉันคิดว่าฉันไม่สามารถเข้าใจความหมายและความสำคัญของมันได้ บทความส่วนใหญ่ไม่ได้บอกว่าเหตุใดจึงสำคัญและฉันจะบรรลุพฤติกรรมหลายรูปแบบใน OOP ได้อย่างไร (แน่นอนใน JavaScript) ฉันไม่สามารถให้ตัวอย่างโค้ดใด ๆ ได้เนื่องจากฉันไม่มีแนวคิดในการใช้งานดังนั้นคำถามของฉันอยู่ด้านล่าง มันคืออะไร? ทำไมเราถึงต้องการ? มันทำงานอย่างไร? ฉันจะบรรลุพฤติกรรมหลายรูปแบบนี้ในจาวาสคริปต์ได้อย่างไร ฉันมีตัวอย่างนี้ แต่เข้าใจได้ง่ายว่าผลของรหัสนี้จะเป็นอย่างไร ไม่ได้ให้ความคิดที่ชัดเจนเกี่ยวกับความหลากหลายของตัวเอง function Person(age, weight) { this.age = age; this.weight = weight; this.getInfo = function() { return "I am " + this.age + " years old " + "and weighs " + this.weight +" kilo."; …

6
จะสร้างโมเดล RESTful API ด้วยการสืบทอดได้อย่างไร
ฉันมีลำดับชั้นของออบเจ็กต์ที่ต้องแสดงผ่าน RESTful API และฉันไม่แน่ใจว่า URL ของฉันควรมีโครงสร้างอย่างไรและควรส่งคืนอะไร ฉันไม่พบแนวทางปฏิบัติที่ดีที่สุด สมมติว่าฉันมีสุนัขและแมวที่สืบทอดมาจากสัตว์ ฉันต้องการการผ่าตัด CRUD กับสุนัขและแมว ฉันยังต้องการที่จะดำเนินการกับสัตว์โดยทั่วไป ความคิดแรกของฉันคือการทำสิ่งนี้: GET /animals # get all animals POST /animals # create a dog or cat GET /animals/123 # get animal 123 สิ่งนี้คือตอนนี้คอลเลกชัน / สัตว์ "ไม่สอดคล้องกัน" เนื่องจากสามารถส่งคืนและรับวัตถุที่ไม่มีโครงสร้างเหมือนกัน (สุนัขและแมว) ถือว่า "RESTful" มีคอลเล็กชันที่ส่งคืนอ็อบเจ็กต์ที่มีแอตทริบิวต์ต่างกันหรือไม่ อีกวิธีหนึ่งคือการสร้าง URL สำหรับคอนกรีตแต่ละประเภทดังนี้: GET /dogs # get all …

30
ความหลากหลาย - กำหนดเพียงสองประโยค [ปิด]
ปิด . คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เน้นไปที่ปัญหาเดียวโดยแก้ไขโพสต์นี้เท่านั้น ปิดให้บริการใน5 ปีที่ผ่านมา ปรับปรุงคำถามนี้ ฉันได้ดูคำจำกัดความและคำอธิบายอื่น ๆ แล้วและไม่มีข้อใดที่ทำให้ฉันพอใจ ฉันต้องการดูว่ามีใครสามารถกำหนดความหลากหลายได้มากที่สุดสองประโยคโดยไม่ต้องใช้รหัสหรือตัวอย่างใด ๆ ฉันไม่อยากได้ยินว่า 'คุณมีคน / รถ / ที่เปิดกระป๋อง ... ' หรือคำนี้ได้มาอย่างไร (ไม่มีใครประทับใจที่คุณรู้ว่า poly และ morph หมายถึงอะไร) หากคุณมีความเข้าใจเป็นอย่างดีว่าพหูสูตคืออะไรและมีความสามารถในการใช้ภาษาอังกฤษได้ดีกว่าที่ควรจะสามารถตอบคำถามนี้ได้โดยใช้คำจำกัดความสั้น ๆ แม้ว่าจะหนาแน่น หากคำจำกัดความของคุณกำหนดความหลากหลายได้อย่างถูกต้อง แต่มีความหนาแน่นมากจนต้องอ่านซ้ำสองสามครั้งนั่นคือสิ่งที่ฉันกำลังมองหา ทำไมแค่สองประโยค? เพราะคำจำกัดความสั้นและฉลาด คำอธิบายยาวและมีตัวอย่างและรหัส ดูคำอธิบายที่นี่ (คำตอบในหน้าเหล่านั้นไม่เป็นที่พอใจสำหรับคำถามของฉัน): Polymorphism vs Overriding vs Overloading พยายามอธิบายความหลากหลายให้ง่ายที่สุดเท่าที่จะทำได้ ทำไมฉันถึงถามคำถามนี้ เนื่องจากฉันถูกถามคำถามเดียวกันและพบว่าฉันไม่สามารถหาคำจำกัดความที่น่าพอใจได้ (ตามมาตรฐานของฉันซึ่งค่อนข้างสูง) ฉันต้องการดูว่ามีจิตใจที่ยอดเยี่ยมในไซต์นี้หรือไม่ หากคุณไม่สามารถกำหนดข้อกำหนดสองประโยคได้จริงๆ (เป็นเรื่องที่ยากที่จะกำหนด) …

2
การกำหนดค่าเริ่มต้นตัวแปร Kotlin สำหรับคลาสลูกทำงานแปลกสำหรับการเริ่มต้นตัวแปรด้วยค่า 0
ฉันได้สร้างลำดับชั้นของคลาสต่อไปนี้: open class A { init { f() } open fun f() { println("In A f") } } class B : A() { var x: Int = 33 init { println("x: " + x) } override fun f() { x = 1 println("x in f: "+ x) } init { …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.