Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ฟังก์ชันโอเวอร์โหลดและคีย์เวิร์ด const ใน C++


ใน C++ เราสามารถโอเวอร์โหลดฟังก์ชันได้ ฟังก์ชันบางอย่างเป็นฟังก์ชันปกติ บางส่วนเป็นฟังก์ชันประเภทคงที่ ให้เราดูโปรแกรมหนึ่งและผลลัพธ์ของโปรแกรมเพื่อรับแนวคิดเกี่ยวกับฟังก์ชันคงที่และฟังก์ชันปกติ

ตัวอย่าง

#include <iostream>
using namespace std;
class my_class {
   public:
      void my_func() const {
         cout << "Calling the constant function" << endl;
      }
      void my_func() {
         cout << "Calling the normal function" << endl;
      }
};
int main() {
   my_class obj;
   const my_class obj_c;
   obj.my_func();
   obj_c.my_func();
}

ผลลัพธ์

Calling the normal function
Calling the constant function

ที่นี่เราจะเห็นว่ามีการเรียกฟังก์ชันปกติเมื่อวัตถุเป็นปกติ เมื่อวัตถุมีค่าคงที่ จะเรียกฟังก์ชันคงที่

หากวิธีการโอเวอร์โหลดสองวิธีมีพารามิเตอร์ และพารามิเตอร์หนึ่งเป็นปกติ อีกวิธีหนึ่งเป็นค่าคงที่ จะทำให้เกิดข้อผิดพลาด

ตัวอย่าง

#include <iostream>
using namespace std;
class my_class {
   public:
      void my_func(const int x) {
         cout << "Calling the function with constant x" << endl;
      }
      void my_func(int x){
         cout << "Calling the function with x" << endl;
      }
};
int main() {
   my_class obj;
   obj.my_func(10);
}

ผลลัพธ์

[Error] 'void my_class::my_func(int)' cannot be overloaded
[Error] with 'void my_class::my_func(int)'

แต่ถ้าอาร์กิวเมนต์เป็นการอ้างอิงหรือประเภทตัวชี้ ก็จะไม่เกิดข้อผิดพลาด

ตัวอย่าง

#include <iostream>
using namespace std;
class my_class {
   public:
      void my_func(const int *x) {
         cout << "Calling the function with constant x" << endl;
      }
      void my_func(int *x) {
         cout << "Calling the function with x" << endl;
      }
};
int main() {
   my_class obj;
   int x = 10;
   obj.my_func(&x);
}

ผลลัพธ์

Calling the function with x