C++

การ Access Modifiers ในภาษา C ไม่มี ขอเปรียบเทียบในภาษา C++ค่ะ

Access Modifiers ใน C++ คือการเอาส่วนที่สำคัญของการเขียนโปรแกรมเชิงวัตถุที่เรียกว่า data hiding โดยการเข้าถึงจะกำหนดข้อจำกัดบางอย่างให้กับสมาชิกคลาสเพื่อไม่ให้ฟังก์ชันภายนอกเข้าถึงได้โดยตรง ตัวปรับแต่งการเข้าถึงมี 3 ประเภท คือ

1.Public : สมาชิกคลาสทั้งหมดที่ประกาศภายใต้ตัวระบุ public จะพร้อมให้ทุกคนเข้าถึงได้ สมาชิกข้อมูลและฟังก์ชันสมาชิกที่ประกาศเป็น public สามารถเข้าถึงได้โดยคลาสและฟังก์ชันอื่นๆ สามารถเข้าถึงได้จากทุกที่ในโปรแกรมโดยใช้ตัวดำเนินการเข้าถึง

// C++ program to demonstrate public
// access modifier

#include<iostream>
using namespace std;

// class definition
class Circle
{
    public: 
        double radius;
        
        double  compute_area()
        {
            return 3.14*radius*radius;
        }
    
};

// main function
int main()
{
    Circle obj;
    
    // accessing public datamember outside class
    obj.radius = 5.5;
    
    cout << "Radius is: " << obj.radius << "\n";
    cout << "Area is: " << obj.compute_area();
    return 0;
}
output :Radius is: 5.5
Area is: 94.985

ในโปรแกรมดังกล่าวข้างต้น รัศมีของสมาชิกข้อมูลจะถูกประกาศให้เป็นpublicเพื่อให้สามารถเข้าถึงได้จากภายนอกคลาส และจึงได้รับอนุญาตให้เข้าถึงจากภายใน main() ได้

2.Private : สมาชิกคลาสที่ถูกประกาศให้เป็นแบบส่วนตัวสามารถเข้าถึงได้เฉพาะโดยฟังก์ชันสมาชิกภายในคลาสเท่านั้น ไม่ได้รับอนุญาตให้เข้าถึงโดยตรงจากอ็อบเจ็กต์หรือฟังก์ชันใดๆ ภายนอกคลาส

ผลลัพธ์ของโปรแกรมข้างต้นคือข้อผิดพลาดระหว่างการคอมไพล์เนื่องจากเราไม่ได้รับอนุญาตให้เข้าถึงสมาชิกข้อมูลส่วนตัวของคลาสโดยตรงจากภายนอกคลาส อย่างไรก็ตาม เราพยายามเข้าถึง obj.radius แต่เนื่องจาก Radius เป็นสมาชิกข้อมูลส่วนตัว เราจึงได้รับข้อผิดพลาดในการคอมไพล์ข้างต้น

อย่างไรก็ตาม เราสามารถเข้าถึงสมาชิกข้อมูลส่วนตัวของคลาสโดยใช้ฟังก์ชัน public ของ class

3.Protected : ตัวปรับแต่งการเข้าถึงแบบ protected จะคล้ายกับตัวปรับแต่งการเข้าถึงแบบ private ในแง่ที่ว่าไม่สามารถเข้าถึงได้จากภายนอกคลาส เว้นแต่จะได้รับความช่วยเหลือจากคลาสเพื่อน ความแตกต่างก็คือสมาชิกคลาสที่ประกาศเป็น Protected สามารถเข้าถึงได้จากคลาสย่อยใดๆ (คลาสที่สืบทอดมา) ของคลาสนั้น

#การเข้าถึงผ่านการสืบทอดนี้สามารถเปลี่ยนแปลงตัวปรับเปลี่ยนการเข้าถึงขององค์ประกอบของคลาสฐานในคลาสที่สืบทอดได้ขึ้นอยู่กับ mode of Inheritance.

Last updated