เมื่อทำงานกับอ็อบเจ็กต์และอินสแตนซ์อื่นๆ ของคลาส การเข้าถึงแอ็ตทริบิวต์เป็นหนึ่งในการดำเนินการปกติสำหรับโปรแกรมเมอร์ การเข้าถึงข้อมูลบางอย่างที่เก็บไว้ในออบเจ็กต์อาจเป็นเรื่องยาก เนื่องจากวิธีการรักษาความปลอดภัยที่ใช้สำหรับออบเจ็กต์เหล่านั้น ดังนั้นแอตทริบิวต์ที่ปิดโดยตัวระบุส่วนตัวและตัวระบุที่มีการป้องกันสามารถดึงออกจากอินสแตนซ์ของคลาสได้เฉพาะในเมธอดที่เป็นของอ็อบเจ็กต์เดียวกันหรือคลาสย่อย (สำหรับการป้องกัน)
คำแนะนำ
ขั้นตอนที่ 1
สร้างวัตถุหรือตัวชี้ไปยังอินสแตนซ์ของคลาสที่มีแอตทริบิวต์ที่คุณต้องการในโปรแกรมของคุณ โครงสร้างมาตรฐานสำหรับการดำเนินการดังกล่าวคือ CMyClass myObj1 บางครั้ง ในการเริ่มต้นวัตถุ คุณต้องส่งพารามิเตอร์บางอย่างไปยังตัวสร้างคลาส ในกรณีนี้ บันทึกของการสร้างอ็อบเจ็กต์อาจมีลักษณะดังนี้: CMyClass myObj1 (param1, param2, param3) โดยที่ CMyClass เป็นชื่อคลาส myObj1 คือชื่อของอ็อบเจ็กต์ที่กำลังสร้าง และพารามิเตอร์ทั้งหมดที่คอนสตรัคเตอร์ร้องขอ ในวงเล็บ. ตัวชี้ไปยังอินสแตนซ์ของคลาสถูกสร้างขึ้นดังนี้: CMyClass * pObj1 = CMyClass ใหม่ (param1, param2, param3)
ขั้นตอนที่ 2
วิธีที่ง่ายที่สุดในการเรียกแอตทริบิวต์คือการอ้างถึงโดยตรงที่ใดก็ได้ในโปรแกรม อย่างไรก็ตาม สิ่งนี้เป็นไปได้สำหรับข้อมูลเปิดที่อธิบายไว้ในคลาสที่มีตัวดัดแปลงสาธารณะเท่านั้น การเข้าถึงโดยตรงผ่านวัตถุมีลักษณะดังนี้: myObj1.attr1 โดยที่ attr1 เป็นแอตทริบิวต์ของคลาสนี้ สำหรับตัวชี้ การโทรจะเป็น: pObj1–> attr1
ขั้นตอนที่ 3
หากแอตทริบิวต์ที่คุณต้องการอ้างถึงมีสถานะที่ซ่อนอยู่และอธิบายไว้ในคลาสที่มีตัวปรับแต่งส่วนตัว การเข้าถึงนั้นสามารถทำได้จากเมธอดที่เป็นของคลาสเดียวกันเท่านั้น เมธอดหรือฟังก์ชันของคลาสต้องมีสถานะสาธารณะเป็นสาธารณะ เพิ่มเมธอดใหม่ให้กับคลาส โดยเขียนการประมวลผลของแอ็ตทริบิวต์ที่ต้องการ ในกรณีนี้ พารามิเตอร์สามารถส่งผ่านไปยังฟังก์ชันได้ ขึ้นอยู่กับค่าของการดำเนินการบางอย่าง ฟังก์ชันนี้ยังสามารถส่งคืนข้อมูล เช่น เนื้อหาของแอตทริบิวต์ รหัสโปรแกรม C ++ ที่ใช้ทั้งสองฟังก์ชันสำหรับการทำงานกับแอตทริบิวต์ส่วนตัว: คลาส CMyClass {ป้องกัน: int attr1; // คุณลักษณะสาธารณะ: void funcA1 (int param) {attr1 = param; } int funcA2 () {กลับ attr1; }};
ขั้นตอนที่ 4
ดังนั้น ในการตั้งค่าแอตทริบิวต์ส่วนตัว attr1 เป็นค่าที่คุณต้องการ ให้เรียกใช้เมธอดของคลาสเดียวกันโดยใช้อ็อบเจ็กต์ที่สร้างไว้ก่อนหน้านี้: myObj1.funcA1 (10) - โดยการดำเนินการโดยนัยที่คล้ายกัน ค่า 10 จะถูกวางไว้ในแอตทริบิวต์ attr1 เมื่อทำงานกับตัวชี้ไปยังอินสแตนซ์ของคลาส การดำเนินการที่คล้ายกันจะมีลักษณะดังนี้: рObj1–> funcA (10) ในการดึงข้อมูลแอตทริบิวต์ส่วนตัว attr1 และค้นหาค่าที่เก็บไว้ในนั้น ให้เรียกวิธีการอื่นของคลาส: int Res = myObj1.funcA2 () ในกรณีนี้ ตัวแปรจำนวนเต็ม Res จะได้รับการกำหนดค่าของตัวแปรคลาสที่ซ่อนอยู่
ขั้นตอนที่ 5
หากคุณต้องการเรียกแอตทริบิวต์ที่มีสถานะป้องกันในวัตถุทั้งหมดของคลาสย่อย ให้อ้างอิงถึงตัวแปรโดยตรง อย่างไรก็ตาม เมื่อทำงานในหน้าที่ของคลาสต่างประเทศ การเข้าถึงข้อมูลที่ได้รับการป้องกันจะต้องได้รับตามวิธีที่อธิบายไว้ข้างต้น
ขั้นตอนที่ 6
ในการเรียกแอตทริบิวต์โดยไม่สร้างวัตถุ ให้ประกาศตัวแปรในคลาสเป็นแบบคงที่โดยใช้โครงสร้างต่อไปนี้: static int attr1 ในกรณีนี้ คุณสามารถดึงแอตทริบิวต์ที่ใดก็ได้ในโค้ดโปรแกรมโดยระบุรายการ: CMyClass:: attr1