ส่งคืนการอ้างอิงใน C ++

Sng Khun Kar Xangxing Ni C



C++ อำนวยความสะดวกในการส่งคืนค่าหรือที่อยู่โดยการอ้างอิงแทนที่จะเป็นพอยน์เตอร์ การใช้การอ้างอิงแทนพอยน์เตอร์จะทำให้โปรแกรม C++ อ่านและจัดการได้ง่ายขึ้น ในภาษา C++ ข้อมูลอ้างอิงและพอยน์เตอร์มีความสัมพันธ์กันอย่างใกล้ชิด ความแตกต่างหลักคือ แม้ว่าการอ้างอิงจะเป็นเพียงชื่อสำรอง แต่เป็น 'นามแฝง' สำหรับตัวแปรอื่น ตัวชี้สามารถนำมาใช้ในการดำเนินการ เช่น การเพิ่มค่า ข้อมูลอ้างอิงเป็นชื่ออื่นหรือซ้ำกับค่าเดิมและแสดงด้วยสัญลักษณ์ '&'

ตัวอย่างที่ 1:

เรานำเข้าไฟล์ส่วนหัว “iostream” จากนั้นใช้เนมสเปซ “std” ไฟล์ส่วนหัวจะถูกนำเข้าในรหัส C++ เนื่องจากมีการกำหนดฟังก์ชันต่างๆ มากมาย จากนั้น เราสร้างฟังก์ชันอ้างอิงการส่งคืนโดยวางสัญลักษณ์ '&' พร้อมกับชื่อของฟังก์ชัน 'returnTheValue'







ตอนนี้การอ้างอิง 'ค่า' ได้ถูกแทรกแล้ว ข้างใต้นี้ เราจะพิมพ์ค่าและที่อยู่ด้วยการอ้างอิง '&value' จากนั้นเราวางการอ้างอิงการส่งคืนและวาง 'ค่า' ตอนนี้ 'main()' ถูกเรียกใช้ที่นี่ และเราเริ่มต้น 'n1' ด้วยค่า '44' ด้านล่างนี้ “int& n2” ถูกเริ่มต้นด้วย “returnTheValue(n1)” ตอนนี้เราพิมพ์ค่าของ 'n1' รวมถึงที่อยู่ของมัน จากนั้นเราพิมพ์ค่าของ 'n2' เช่นเดียวกับที่อยู่ของ 'n2' โดยใช้ 'cout'



รหัส 1:



#รวม
ใช้เนมสเปซมาตรฐาน;
ภายใน & returnTheValue ( ภายใน & ค่า )
{
ศาล << 'มูลค่า = ' << ค่า << สิ้นสุด
<< 'ที่อยู่ของมูลค่าคือ'
<< & ค่า << จบ;
กลับ ค่า;
}
int หลัก ( )
{
คุณ n1 = 44 ;
ภายใน & n2 = ค่าส่งคืน ( n1 ) ;
ศาล << 'n1 = ' << n1 << สิ้นสุด
<< 'ที่อยู่ของ n1 คือ'
<< & n1 << จบ;
ศาล << 'n2 = ' << n2 << สิ้นสุด
<< 'ที่อยู่ของ n2 คือ'
<< & n2 << จบ;
กลับ 0 ;
}


เอาท์พุท:





ในที่นี้ เราจะสังเกตได้ว่าการอ้างอิงเป็นเพียงชื่อสำรองของตัวแปรอื่นดังที่แสดงต่อไปนี้ เนื่องจากเป็นที่อยู่ของค่า “n1” และ “n2” จึงไม่เคยเปลี่ยนแปลง



ตัวอย่างที่ 2:

เราใช้เนมสเปซ “std” หลังจากนำเข้าไฟล์ส่วนหัว “iostream” ต่อไป เราใช้ชื่อฟังก์ชัน “MyReturnValueFunc” และสัญลักษณ์ “&” เพื่อสร้างฟังก์ชันอ้างอิงการส่งคืน การอ้างอิงถึงตัวแปร “v1” ถูกวางไว้ที่นี่ เราพิมพ์ค่าและที่อยู่โดยมีการอ้างอิง “&v1” ข้างใต้นี้ ต่อไป เราจะแทรก 'การอ้างอิงการส่งคืน' โดยใช้ 'การส่งคืน' และ 'v1' ในตำแหน่งนี้ ในที่นี้เรียกว่า 'main()' และ 'num_1' เริ่มต้นด้วยค่า '19' การเริ่มต้น 'int& num_2' เสร็จสิ้นด้วย 'MyReturnValueFunc(num_1)'

ขณะนี้เราพิมพ์ค่าและที่อยู่ของ 'num_1' และใช้ 'cout' เราพิมพ์ค่าและที่อยู่ของ 'num_2' ตอนนี้เราเปลี่ยนค่าของ “num_1” โดยใช้ที่อยู่ที่ส่งคืนที่นี่โดย “MyReturnValueFunc” ฟังก์ชันนี้ส่งคืนชื่อสำรองของ “v1” ซึ่งเป็นชื่อสำรองของ “num_1” เช่นกัน ดังนั้นเราจึงเปลี่ยนค่าและตั้งเป็น '91' เรากำหนด '91' ให้กับ 'MyReturnValueFunc(num_1)' ซึ่งทำหน้าที่เป็นนามแฝงที่นี่ จากนั้นเราพิมพ์ค่าอีกครั้งและที่อยู่ของ “num_1”

รหัส 2:

#รวม
ใช้เนมสเปซมาตรฐาน;
ภายใน & MyReturnValueFunc ( ภายใน & เวอร์ชัน 1 )
{
ศาล << 'ค่าของ v1 = ' << เวอร์ชัน 1 << สิ้นสุด
<< ' ที่อยู่ของตัวแปร v1 คือ '
<< & เวอร์ชัน 1 << จบ;
กลับ v1;
}
int หลัก ( )
{
int num_1 = 19 ;
ภายใน & num_2 = MyReturnValueFunc ( หมายเลข_1 ) ;
ศาล << 'ค่าของ num_1 = ' << หมายเลข_1 << สิ้นสุด
<< ' ที่อยู่ของ num_1 คือ '
<< & หมายเลข_1 << จบ;
ศาล << 'ค่าของ num_2 = ' << หมายเลข_2 << สิ้นสุด
<< ' ที่อยู่ของ num_2 คือ '
<< & หมายเลข_2 << จบ;
MyReturnValueFunc ( หมายเลข_1 ) = 91 ;
ศาล << 'ตอนนี้ค่าของ num_1 = ' << หมายเลข_1 << สิ้นสุด
<< 'ที่อยู่ของ num_1 คือ'
<< & หมายเลข_1 << จบ;
กลับ 0 ;
}


เอาท์พุท:

ดังที่แสดงในตัวอย่างต่อไปนี้ เราจะเห็นว่าการอ้างอิงเป็นเพียงชื่อทางเลือกสำหรับตัวแปรอื่น เนื่องจากที่อยู่ของค่า 'v1', 'num_1' และ 'num_2' ยังคงคงที่:

ตัวอย่างที่ 3:

ไฟล์ส่วนหัว “iostream” ถูกนำเข้า และใช้เนมสเปซ “std” เนื่องจากมีการระบุฟังก์ชันมากมายไว้ในไฟล์ส่วนหัว เราจึงนำเข้าฟังก์ชันเหล่านั้นลงในโค้ด C++ ที่นี่ เราสร้างฟังก์ชัน “ReturnRefFun()” โดยที่เราวาง “int& my_ref” ซึ่งจะส่งคืนข้อมูลอ้างอิง “int& ReturnRefFun” ถูกประกาศไว้ที่นี่เป็นฟังก์ชันอ้างอิง หลังจากนั้น เราจะเพิ่มค่าของตัวแปร “my_ref” ข้างใต้นี้ เราใส่ 'return' ซึ่งส่งคืนการอ้างอิงของ 'my_ref'

หลังจากนี้ เมธอด 'main()' จะถูกเรียกใช้ที่นี่ จากนั้นเราเริ่มต้นตัวแปร 'first_value' ด้วย '21' ด้านล่างนี้ เราจะส่งคืนสำเนาของข้อมูลอ้างอิงโดยการวาง 'first_value' ในฟังก์ชัน 'ReturnRefFun' และบันทึกไว้ในตัวแปร 'copied_value' จากนั้น เราพิมพ์ทั้ง 'first_value' และ 'copied_value' โดยใช้ 'cout' ข้างใต้นี้ เราจะเพิ่มตัวแปร “copied_value” โดยการวาง “copied_value++” จากนั้นเราพิมพ์ “copied_value” หลังจากเพิ่มขึ้นและพิมพ์ “first_value” โดยใช้ “cout” หลังจากนี้ เราจะส่งคืนข้อมูลอ้างอิงด้วยความช่วยเหลือของการเริ่มต้นตัวแปร “int& ref_value” ด้วย “ReturnRefFun(first_value)”

หลังจากนี้ เราจะพิมพ์ค่าของตัวแปร “my_ref” ที่เราคัดลอกไว้ จากนั้นเราพิมพ์ค่าของตัวแปร “first_value” ข้างใต้นี้ เราจะเพิ่มค่าของ 'ref_value' โดยการใส่ 'ref_value++' ด้านล่างนี้ เราจะพิมพ์ค่าที่เพิ่มขึ้นของ “ref_value” และตัวแปร “first_value” ด้วยความช่วยเหลือของ “cout” เมื่อ 'ref_value' มีการเปลี่ยนแปลง 'first_value' ก็จะเปลี่ยนไปด้วย

รหัส 3:

#รวม
ใช้เนมสเปซมาตรฐาน;
ภายใน & ReturnRefFun ( ภายใน & my_ref ) {
my_ref++;
กลับ my_ref;
}
int หลัก ( ) {
ภายใน first_value = ยี่สิบเอ็ด ;
ภายใน คัดลอก_ค่า =ReturnRefFun ( first_value ) ;
ศาล << 'ค่าแรกคือ:' << first_value << จบ;
ศาล << 'ค่าที่คัดลอกคือ:' << คัดลอก_ค่า << จบ;
คัดลอก_ค่า++;
ศาล << 'ค่า copy_value เพิ่มขึ้น: ' << คัดลอก_ค่า << จบ;
ศาล << 'ค่าแรก : ' << first_value << จบ;
ภายใน & ref_value =ReturnRefFun ( first_value ) ;
ศาล << 'ค่าที่คัดลอกอ้างอิง: ' << ref_value << จบ;
ศาล << 'ค่าแรก : ' << first_value << จบ;
ref_value++;
ศาล << 'ค่าอ้างอิงเพิ่มขึ้น : ' << ref_value << จบ;
ศาล << 'ค่าแรก : ' << first_value << จบ;
กลับ 0 ;
}


เอาท์พุท:

นี่คือผลลัพธ์ของโค้ดก่อนหน้านี้ที่เราใช้เทคนิค 'การอ้างอิงการส่งคืน' ตัวอย่างนี้แสดงความแตกต่างระหว่างการส่งคืนตัวแปรอ้างอิงที่ซ้ำกันและการส่งคืนตัวแปรอ้างอิงเอง

ตัวอย่างที่ 4:

ในที่นี้ “int& rByRef” ได้รับการประกาศเป็นฟังก์ชันอ้างอิงซึ่งส่งคืนตัวแปรอ้างอิง เราส่งต่อ 'int& data' ไปยังฟังก์ชัน 'int& rByref()' นี้ ที่นี่เราพิมพ์ที่อยู่ของตัวแปร 'data' จากนั้นใช้การอ้างอิงการส่งคืนด้านล่างนี้ ตอนนี้เราเริ่มต้นตัวแปร “x_var” หลังจากเรียกใช้เมธอด “main()” จากนั้น เราพิมพ์ที่อยู่ของ “x_var” ที่นี่โดยใส่ “&x_var” ลงใน “cout”

ด้านล่างนี้ เราใช้ตัวแปรอ้างอิงโดยกำหนด 'rByref(x_var)' ให้กับ 'int& y_var' จากนั้น เรายังพิมพ์ที่อยู่ของตัวแปรอ้างอิง “&y_var” นั้นด้วย ด้านล่างนี้ เราคัดลอกตัวแปร “x_var” ลงในตัวแปร “z_var” และยังพิมพ์ที่อยู่ของตัวแปรที่คัดลอกซึ่งก็คือ “&z_var” หลังจากนี้ เราเรียกฟังก์ชัน 'rByref()' ส่งตัวแปร 'x_var' เป็นพารามิเตอร์ที่อยู่ภายใน และกำหนด '93' ให้กับตัวแปรนี้ นอกจากนี้เรายังแสดงที่อยู่ของ “x_var” อีกครั้งโดยใส่ “&x_var” ใน “cout”

รหัส 4:

#รวม
ใช้เนมสเปซมาตรฐาน;
ภายใน & rByref ( ภายใน & ข้อมูล )
{
ศาล << 'ที่อยู่ของข้อมูล:' << & ข้อมูล << จบ;
กลับ ข้อมูล;
}
int หลัก ( )
{
int x_var = 42 ;
ศาล << 'ที่อยู่ของ x_var: ' << & x_var << จบ;
ภายใน & y_var = rByref ( x_var ) ;
ศาล << 'ที่อยู่ของ y_var: ' << & y_var << จบ;
int z_var = rByref ( x_var ) ;
ศาล << 'ที่อยู่ของ z_var: ' << & z_var << จบ;
rByref ( x_var ) = 93 ;
ศาล << 'ที่อยู่ของ x_var: ' << & x_var << จบ;
กลับ 0 ;
}


เอาท์พุท:

ผลลัพธ์ทำให้ชัดเจนว่าที่อยู่ของตัวแปรที่ถูกโคลน “z_var” แตกต่างจากตำแหน่งอื่นๆ ทั้งหมดที่ตัวแปรดั้งเดิม “x_var” อ้างอิงถึง

บทสรุป

มีการสำรวจแนวคิด 'การอ้างอิงการส่งคืน' ในบทช่วยสอนนี้โดยละเอียด เราได้เรียนรู้ว่า 'การอ้างอิงการส่งคืน' คล้ายกับ 'พอยน์เตอร์' ในการเขียนโปรแกรม C++ เราได้พูดคุยกันว่าเพื่อระบุว่าฟังก์ชันใดส่งคืนการอ้างอิง จำเป็นต้องใช้สัญลักษณ์ “&” กับประเภทการส่งคืนของฟังก์ชัน เราได้แสดงตัวอย่างและผลลัพธ์บางส่วนและเข้าใจแนวคิดนี้ในบทช่วยสอนนี้