Computer >> Máy Tính >  >> Lập trình >> C ++

Nạp chồng hàm và từ khóa const trong C ++

Trong C ++, chúng ta có thể nạp chồng các hàm. Một số chức năng là chức năng bình thường; một số là hàm kiểu không đổi. Hãy để chúng tôi xem một chương trình và đầu ra của nó để có ý tưởng về các hàm hằng và các hàm bình thường.

Ví dụ

#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();
}

Đầu ra

Calling the normal function
Calling the constant function

Ở đây chúng ta có thể thấy rằng hàm bình thường được gọi khi đối tượng bình thường. Khi đối tượng là hằng số, thì các hàm hằng được gọi.

Nếu hai phương thức được nạp chồng chứa các tham số và một tham số là bình thường, một tham số khác là hằng số, thì điều này sẽ tạo ra lỗi.

Ví dụ

#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);
}

Đầu ra

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

Nhưng nếu các đối số là tham chiếu hoặc kiểu con trỏ, thì nó sẽ không tạo ra lỗi.

Ví dụ

#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);
}

Đầu ra

Calling the function with x