(ที่สามารถเปลี่ยนค่าได้ตลอดหลักสูตร)
หรือ 'อินสแตนซ์ของบางสิ่งบางอย่าง' เกี่ยวข้องกับคลาสและวัตถุอย่างเคร่งครัดหรือไม่ ถ้าเป็นเช่นนั้นคุณจะกำหนดแนวคิดของ 'ตัวแปร' เมื่อมันมาถึง C ++ อย่างไร
(ที่สามารถเปลี่ยนค่าได้ตลอดหลักสูตร)
หรือ 'อินสแตนซ์ของบางสิ่งบางอย่าง' เกี่ยวข้องกับคลาสและวัตถุอย่างเคร่งครัดหรือไม่ ถ้าเป็นเช่นนั้นคุณจะกำหนดแนวคิดของ 'ตัวแปร' เมื่อมันมาถึง C ++ อย่างไร
คำตอบ:
เท่าที่ฉันรู้มันถูกต้องในการเรียกค่าของอินสแตนซ์ประเภทดั้งเดิมของประเภท นั้น (ดูตัวอย่าง"C + Type System"จากคู่มือของ Visual Studio แต่ฉันยังคงมองหาแหล่งอื่น) แม้ว่าฉันเชื่อว่าคำนี้ ส่วนใหญ่จะใช้เมื่อพูดคุยวัตถุ วัตถุเป็นตัวอย่างของคลาส C ถ้ามันถูกสร้างขึ้นจากคอนสตรัคเตอร์ที่กำหนดในคลาส C หรือหนึ่งในคลาสย่อยของมัน
ตัวแปรใน C ++ ไม่ใช่แนวคิดรันไทม์ มันมีอยู่ในคอมไพเลอร์ของคุณในฐานะที่มีผลผูกพันศัพท์ระหว่างชื่อของตัวแปรและตำแหน่งที่เป็นนามธรรม (ไม่แน่นอนถ้าไม่ใช่ const) เมื่อโปรแกรมรวบรวมแล้วตัวแปรจะไม่อยู่ที่นั่นอีกต่อไป แต่ข้อมูลจะถูกอ่านและเขียนในการลงทะเบียนหน่วยความจำ ฯลฯ
int
ประเภท มาตรฐาน C ++ ไม่ได้ทำให้ความแตกต่างระหว่างชนิดดั้งเดิมและประเภทที่ไม่ใช่ดั้งเดิมเมื่อพูดถึงการประกาศตัวแปรทำอะไร ดังนั้นT t;
ประกาศวัตถุประเภทT
ไม่ว่าT
จะเกิดอะไรขึ้น
หรือ 'อินสแตนซ์ของบางสิ่งบางอย่าง' เกี่ยวข้องกับคลาสและวัตถุอย่างเคร่งครัดหรือไม่ ถ้าเป็นเช่นนั้นคุณจะกำหนดแนวคิดของ 'ตัวแปร' เมื่อมันมาถึง C ++ อย่างไร
เพื่อให้มันรัดกุมที่สุดสำหรับ C ++
เพียงเพื่อให้ชัดเจน:
malloc()
บัฟเฟอร์ใหม่แต่ไม่มีการเตรียมการ: มันเป็นพื้นที่หน่วยความจำที่ยังไม่เป็นวัตถุ ในทำนองเดียวกันวัตถุที่ถูกทำลายอย่างชัดเจน: มันเป็นพื้นที่หน่วยความจำที่ไม่ใช่วัตถุอีกต่อไป
"แก้ไข" หมายถึงอะไร?
หากเราต้องการเข้มงวดมากเกี่ยวกับเรื่องนี้เราจำเป็นต้องแยกแยะระหว่าง:
ดังนั้นตัวแปร - เป็นนิพจน์ - จะมีชนิด คุณค่าของมัน - วัตถุที่อ้างถึง - จะเป็นตัวอย่างของบางคลาส และโปรดทราบว่าประเภทของตัวแปรและคลาสของวัตถุนั้นไม่ใช่สิ่งเดียวกัน - ประเภทของตัวแปรนั้นทำให้ขอบเขตบนของคลาสรันไทม์ของวัตถุดังนั้นคลาสจะต้องเป็นชนิดย่อยของคลาสที่สอดคล้องกับประเภทนั้น
คุณต้องการที่จะทำซ้ำคำที่ใหญ่ตลอดเวลาหรือไม่ ไม่ได้ เราต้องการพูดอย่างเคร่งครัดเพียงใดและขึ้นอยู่กับบริบทอย่างเคร่งครัด บ่อยครั้งที่ไม่มีปัญหากับการพูดว่า "ตัวแปรเป็นตัวอย่างของประเภทนี้" สิ่งที่เกิดขึ้นจริง ๆ แล้วก็คือเรากำลังใช้ตัวแปรและประเภท metonymically เพื่ออ้างถึงวัตถุและซุปเปอร์คลาสของรันไทม์คลาส
นอกเสียจากว่าคุณต้องการใช้เวลาทั้งชีวิตในเรื่องของความพิถีพิถันและความละเอียดอ่อน ... ใช่
ทุกครั้งที่คุณเก็บบางสิ่งที่ระบุการใช้เพื่อปลอมแปลงสิ่งอื่น ๆ ที่สามารถระบุตัวตนของคุณได้
บางอินสแตนซ์เหล่านั้นอาจมีชื่อที่แม่นยำกว่า แต่โดยทั่วไปแล้วงานนี้
หลายคนจอง "อินสแตนซ์" สำหรับอินสแตนซ์ของคลาส หากคุณทำเช่นนั้นใน C ++ ตัวแปรอาจเป็นอินสแตนซ์ของคลาสการอ้างอิงไปยังอินสแตนซ์ตัวชี้ไปยังอินสแตนซ์หรือประเภทดั้งเดิม (คุณน่าจะนับ struct เป็นคลาสในบริบทนั้น สมบูรณ์เหมือนกัน) ใน Java หรือ Objective-C ตัวแปรจะไม่เป็นอินสแตนซ์ แต่อาจอ้างอิงไปยังอินสแตนซ์
ลืม: ในช่วงเวลาสั้น ๆ ตัวชี้ C ++ สามารถเป็นตัวชี้ไปยังหน่วยความจำดิบตัวอย่างเช่น "this" ก่อนที่ Constructor จะเริ่มดำเนินการ คุณน่าจะไม่โทร * นี่เป็นตัวอย่างในตอนนี้