ช่วยอธิบาย output ของ code นี้ให้ทีครับ ว่ามาได้ยังไง [ลิ้งรูปภาพ]

.
แก้ไขข้อความเมื่อ
คำตอบที่ได้รับเลือกจากเจ้าของกระทู้
ความคิดเห็นที่ 1
เนื่องจาก Constructor มันถูก Overload ครับ แล้วใน Constructor ของแต่ละตัวเองก็มีการเรียก Contructor ของตัวอื่นๆซ้ำเช่นกัน ทำให้ผลลัพธ์มันค่อนข้างดูงงครับ ฉะนั้นลองค่อยๆไล่เป็นขั้นตอนตามผมดังนี้นะครับ

ในโค้ดนี้มีการสร้าง Class ชื่อ Quadrangle ถูกมั้ยครับ ?
ซึ่งใน main ก็มีการสร้าง Object จาก Class นี้ โดยให้ Object นั้นชื่อว่า mySquare แล้วใส่ค่าในวงเล็บหรือใน Argument เป็น 1.5
และค่า 1.5 มันเป็นทศนิยม ทำให้ Constructor ตัวที่สามหรือ Quadranger(double width) ทำงานก่อน

เมื่อเข้าไปใน Constructor ชื่อ Quadranger(double width) แล้ว เห็นมั้ยครับว่าบรรทัดแรกมันเขียนว่า this(3) ความหมายก็คือมันเรียก Constructor ใน Class ของมันเองอีกรอบครับ โดยคราวนี้ใส่ค่า Argument เป็น 3 และค่า 3 มันเป็นจำนวนเต็ม ทำให้ Constructor ตัวที่สองหรือ Quadranger(int width) ถูกเรียกใช้งาน

เมื่อเข้าไปใน Constructor ชื่อ Quadranger(int width) ซึ่งถูกเรียกโดย Constructor ตัวที่สามก่อนหน้านี้
ในบรรทัดแรกของตัวนี้จะทำการกำหนดค่าให้กับ Attribute หรือตัวแปรของคลาสคือคำสั่ง this.width = (double)width (ตอนนี้ตัวแปรของ Class มีค่า 3.0 แล้ว)
โดยที่บรรทัด width += 4.2 นั้นไม่ได้ทำให้ตัวแปรของ Class เปลี่ยนค่านะครับ เนื่องจากใน Constructor ตัวนี้มีการรับ Argument จากภายนอกชื่อ int width ทำให้บรรทัด width += 4.2 มันหมายถึง int width แทนครับ ฉะนั้นตัวแปร width ของ Class ยังเป็น 3.0 เหมือนเดิม ไม่ใช่ 7.2
จากนั้นบรรทัดที่สามก็ทำการปริ้นค่าออกทางจอภาพด้วยข้อความ Line15..... ตบท้ายด้วยการเรียกฟังก์ชั่นเพื่อคำนวณค่าชื่อ calcArea() จึงทำให้ผลบรรทัดแรกของจอภาพได้เป็น 9.0 (ได้มาจาก 3.0*3.0)

มาต่อจากจุดที่เราค้างไว้ใน Constructor ตัวที่สาม หลังจากเราเรียก this(3) ไปแล้ว (ณ ตอนนี้ค่าของตัวแปรใน Class ก็ยังเป็น 3.0 อยู่)
บรรทัดต่อมาคือ this.width += 2.5 ทำให้ค่าตัวแปรของ Class กลายเป็น 3.0+2.5 = 5.5 ครับ
หลังจากนั้นจึงเรียกปริ้นค่าออกด้วยข้อความ Line19.... และแสดงผลการคำนวณด้วยฟังก์ชั่น calcArea() จึงทำให้บรรทัดที่สองของจอภาพ ได้เป็น 30.25 (ได้มาจาก 5.5*5.5)

ย้อนกลับไป ณ ที่เราประกาศสร้าง Object ชื่อ mySquare ในบรรทัด 3 ของโค้ด
บรรทัดที่ 4 ก็ปริ้นค่าออกทางจอภาพว่า Width of mySquare.... แล้วเรียกค่าจากตัวแปรของฟังก์ชั่นออกมาก็คือ 5.5

สุดท้ายก็ปริ้นค่าออกด้วยข้อความ Line5..... แล้วก็เรียกใช้ฟังก์ชั่น calcArea() คำนวณหาพื้นที่จากตัวแปรของ Class ซ้ำอีกครั้ง ทำให้ได้ผลลัพธ์มาเป็น 30.25 เท่ากับบรรทัดที่สองของจอภาพครับ เพราะไม่ได้มีการเปลี่ยนแปลงค่าอีกแล้ว



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