คลาสและวัตถุ C++

ในบทช่วยสอนนี้ เราจะเรียนรู้เกี่ยวกับอ็อบเจ็กต์และคลาสและวิธีใช้งานใน C++ ด้วยความช่วยเหลือจากตัวอย่าง

ในบทช่วยสอนก่อนหน้านี้ เราเรียนรู้เกี่ยวกับฟังก์ชันและตัวแปร บางครั้ง ขอแนะนำให้ใส่ฟังก์ชันและข้อมูลที่เกี่ยวข้องไว้ในที่เดียว เพื่อให้ทำงานได้อย่างมีตรรกะและง่ายขึ้น

สมมุติว่าเราต้องเก็บความยาว ความกว้าง และความสูงของห้องสี่เหลี่ยมแล้วคำนวณพื้นที่และปริมาตรของห้องนั้น

ในการจัดการงานนี้ เราสามารถสร้างตัวแปร 3 ตัว คือ length, breadth และ height พร้อมกับฟังก์ชั่น calculateArea() และ calculateVolume().

อย่างไรก็ตาม ใน C++ แทนที่จะสร้างตัวแปรและฟังก์ชันแยกกัน เรายังสามารถรวมข้อมูลและฟังก์ชันที่เกี่ยวข้องเหล่านี้ไว้ในที่เดียว (โดยการสร้างobject ) กระบวนทัศน์การเขียนโปรแกรมนี้เรียกว่าการเขียนโปรแกรมเชิงวัตถุ

แต่ก่อนที่เราจะสามารถสร้างวัตถุและใช้งานใน C++ เราต้องเรียนรู้เกี่ยวกับคลาสก่อน

คลาส C++ (C++ Class)


คลาสเป็นพิมพ์เขียวสำหรับวัตถุ

เราสามารถคิด คลาส (class) เป็นภาพร่าง (ต้นแบบ) ของบ้านได้ ประกอบด้วยรายละเอียดทั้งหมดเกี่ยวกับพื้น ประตู หน้าต่าง ฯลฯ ตามคำอธิบายเหล่านี้ เราสร้างบ้าน และ บ้านเป็นวัตถุ

การสร้าง Class (Create a Class)


คลาสถูกกำหนดใน C ++ โดยใช้คีย์เวิร์ด class ตามด้วยชื่อของคลาส

เนื้อหาของคลาสถูกกำหนดไว้ในวงเล็บปีกกาและสิ้นสุดด้วยเครื่องหมาย ; ในตอนท้าย

class className {
   // some data
   // some functions
};


ตัวอย่างเช่น,

class Room {
    public:
        double length;
        double breadth;
        double height;   

        double calculateArea(){   
            return length * breadth;
        }

        double calculateVolume(){   
            return length * breadth * height;
        }

};


เรากำหนดคลาสชื่อ Room.

ตัวแปร length , breadth , และ height ประกาศภายใน คลาส Room ที่รู้จักกัน เรียกว่า ข้อมูลสมาชิก (data members) และฟังก์ชัน calculateArea() และ calculateVolume() เรียกว่าฟังก์ชันสมาชิกของคลาส (member functions)

วัตถุ C++ (C++ Objects)


เมื่อมีการกำหนดคลาส จะกำหนดเฉพาะข้อกำหนดสำหรับอ็อบเจ็กต์เท่านั้น ไม่มีการจัดสรรหน่วยความจำหรือที่เก็บข้อมูล ในการใช้ข้อมูลและฟังก์ชันการเข้าถึงที่กำหนดไว้ใน คลาส เราจำเป็นต้องสร้างวัตถุ (objects)

ไวยากรณ์เพื่อกำหนดวัตถุใน C ++
(Syntax to Define Object in C++)

className objectVariableName;


เราสามารถสร้างวัตถุ (create objects) ของคลาส Room (กำหนดในตัวอย่างข้างต้น) ดังต่อไปนี้:

// sample function
void sampleFunction() {
    // create objects
    Room room1, room2;
}

int main(){
    // create objects 
    Room room3, room4;
}


มี 2 วัตถุ room1 และ room2 ของคลาส Room ถูกสร้างขึ้นใน sampleFunction(). ในทำนองเดียวกัน วัตถุ room3 และ room4 ถูกสร้างขึ้นใน main().

ดังที่เราเห็น เราสามารถสร้างวัตถุของคลาสในฟังก์ชันใดก็ได้ของโปรแกรม นอกจากนี้เรายังสามารถสร้างวัตถุของคลาสภายในตัวคลาสเอง หรือในคลาสอื่น ๆ

นอกจากนี้ เราสามารถสร้างวัตถุได้มากเท่าที่ต้องการจากคลาสเดียว

การเข้าถึงสมาชิกข้อมูล C++ และฟังก์ชันสมาชิก
(C++ Access Data Members and Member Functions)


เราสามารถเข้าถึงข้อมูลสมาชิกและฟังก์ชันสมาชิกของคลาสโดยใช้ตัวดำเนินการ.(จุด) ตัวอย่างเช่น,

room2.calculateArea();


สิ่งนี้จะเรียกใช้ calculateArea() ฟังก์ชันภายในคลาส Room สำหรับ วัตถุ room1 และ room2

ในทำนองเดียวกัน สมาชิกข้อมูล (data members) สามารถเข้าถึงได้ดังนี้:

room1.length = 5.5;


ในกรณีนี้ มันจะกำหนด length ตัวแปรของ room1 มีค่าเป็น 5.5

ตัวอย่างที่ 1: อ็อบเจ็กต์และคลาสในการเขียนโปรแกรม C++

// Program to illustrate the working of
// objects and class in C++ Programming

#include <iostream>
using namespace std;

// create a class
class Room {

   public:
    double length;
    double breadth;
    double height;

    double calculateArea() {
        return length * breadth;
    }

    double calculateVolume() {
        return length * breadth * height;
    }
};

int main() {

    // create object of Room class
    Room room1;

    // assign values to data members
    room1.length = 42.5;
    room1.breadth = 30.8;
    room1.height = 19.2;

    // calculate and display the area and volume of the room
    cout << "Area of Room =  " << room1.calculateArea() << endl;
    cout << "Volume of Room =  " << room1.calculateVolume() << endl;

    return 0;
}


เอาท์พุต

ในโปรแกรมนี้ เราได้ใช้คลาส Room และอ็อบเจกต์ของมันคือ room1 เพื่อคำนวณพื้นที่และปริมาตรของห้อง

ใน main() เรากำหนดค่าของ length, breadth, และ height ด้วยคำสั่ง:

room1.length = 42.5;
room1.breadth = 30.8;
room1.height = 19.2;


จากนั้นเราเรียกฟังก์ชัน calculateArea() และ calculateVolume() ทำการคำนวณที่จำเป็น

สังเกตการใช้คีย์เวิร์ด public ในโปรแกรม ซึ่งหมายความว่าสมาชิกเป็นแบบสาธารณะและสามารถเข้าถึงได้จากทุกที่จากโปรแกรม

ตามความต้องการของเรา เรายังสามารถสร้างสมาชิกส่วนตัวโดยใช้คีย์เวิร์ด private สมาชิกส่วนตัวของคลาส สามารถเข้าถึงได้จากภายในคลาส เท่านั้น ตัวอย่างเช่น,

class Test {

  private:
    int a;
    void function1() { }

  public:
    int b;
    void function2() { }
};


a และ function1() เป็นส่วนตัว จึงไม่สามารถเข้าถึงได้จากภายนอกคลาส

ในทางกลับกัน, b และ function2() สามารถเข้าถึงได้จากทุกที่ในโปรแกรม

ตัวอย่างที่ 2: การใช้สาธารณะและส่วนตัวใน C ++ Class

// Program to illustrate the working of
// public and private in C++ Class

#include <iostream>
using namespace std;

class Room {

   private:
    double length;
    double breadth;
    double height;

   public:

    // function to initialize private variables
    void initData(double len, double brth, double hgt) {
        length = len;
        breadth = brth;
        height = hgt;
    }

    double calculateArea() {
        return length * breadth;
    }

    double calculateVolume() {
        return length * breadth * height;
    }
};

int main() {

    // create object of Room class
    Room room1;

    // pass the values of private variables as arguments
    room1.initData(42.5, 30.8, 19.2);

    cout << "Area of Room =  " << room1.calculateArea() << endl;
    cout << "Volume of Room =  " << room1.calculateVolume() << endl;

    return 0;
}


เอาท์พุต

ตัวอย่างข้างต้นเกือบจะเหมือนกับตัวอย่างแรก ยกเว้นว่าตอนนี้ตัวแปรคลาสเป็นแบบส่วนตัว (private)

เนื่องจากตอนนี้ตัวแปรเป็นแบบส่วนตัว เราจึงไม่สามารถเข้าถึงได้โดยตรงจาก main(). ดังนั้น การใช้คำสั่งต่อไปนี้จะไม่ถูกต้อง:

// invalid code
obj.length = 42.5;
obj.breadth = 30.8;
obj.height = 19.2;


แต่เราต้องใช้คีย์เวิร์ด public ในโปรแกรม ซึ่งหมายความว่าสมาชิกเป็นแบบสาธารณะและสามารถเข้าถึงได้จากทุกที่จากโปรแกรม โดยฟังก์ชั่น initData() ในการเริ่มต้นตัวแปรส่วนตัวผ่านพารามิเตอร์ฟังก์ชั่น double len, double brth, และ double hgt

Leave a Reply

Your email address will not be published. Required fields are marked *