2011-12-21 38 views
18

thể trùng lặp:
What is the difference between a method and a functionTrong C++, sự khác biệt giữa một phương pháp và một chức năng là những gì

Tôi đang cố gắng để có được thuật ngữ của tôi chính xác.

Sự khác nhau giữa phương pháp và hàm, liên quan đến C++ cụ thể là gì.

Có phải phương thức trả về không có gì và chỉ thực hiện các thao tác trên lớp của nó; trong khi hàm có giá trị trả về?

+3

@Ash Burlaczenko Tôi không nghĩ đó là bản sao của câu hỏi đó, vì câu hỏi đó không cụ thể với C++. –

+0

Tôi đồng ý, đây không phải là bản sao. Trong thực tế, tôi thậm chí nghĩ rằng đây là một câu hỏi hay hơn, vì phạm vi được xác định rõ hơn. – joaerl

Trả lời

35

Theo như tiêu chuẩn C++ có liên quan, không có điều gì như là một "phương pháp". Thuật ngữ này được sử dụng trong các ngôn ngữ OO khác (ví dụ: Java) để chỉ các hàm thành viên của một lớp.

Sử dụng phổ biến, bạn sẽ thấy rằng hầu hết mọi người sẽ sử dụng "phương pháp" và "chức năng" nhiều hơn hoặc ít thay thế cho nhau, mặc dù một số người sẽ hạn chế sử dụng "phương pháp" cho các chức năng thành viên (trái ngược với "chức năng miễn phí") mà không phải là thành viên của một lớp).

+2

Dường như với tôi OP không hề quan tâm đến tiêu chuẩn C++. Không phải cái 98, không phải là cái thứ ba không * thở hổn hển * ngay cả 11 cái. Anh ta chỉ quan tâm đến thuật ngữ chính xác. –

+4

Và thuật ngữ chính xác không phải là "phương pháp", nó là hàm thành viên. –

+9

@CaptainGiraffe: Tôi hiểu ý của bạn. Nhưng không có "thuật ngữ chính xác" khác với những gì trong tiêu chuẩn. Bất cứ điều gì khác chỉ là ad-hoc. –

1

Phương thức là hàm thành viên của lớp, nhưng trong C++ chúng thường được gọi là hàm thành viên hơn so với phương thức (một số lập trình viên đến từ các ngôn ngữ khác như Java gọi chúng là phương thức).

Một hàm thường có nghĩa là một hàm tự do, không phải là thành viên của một lớp.

Vì vậy, trong khi hàm thành viên là hàm, hàm không nhất thiết phải là hàm thành viên.

Ví dụ:

void blah() { } // function 

class A { 
    void blah() { } // member function (what would be a "method" in other languages) 
}; 

blah(); // free functions (non-member functions) can be called like this 

A ainst; 
ainst.blah(); // member functions require an instance to invoke them on 
9

Xin lỗi, nhưng đây là một trong Peeves vật cưng của tôi. Phương thức chỉ là một thuật ngữ kiểu OO chung. Các phương thức không tồn tại trong C++. Nếu bạn mở tiêu chuẩn C++, bạn sẽ không tìm thấy bất kỳ đề cập đến "phương pháp". C++ có chức năng, với nhiều hương vị khác nhau.

+4

Và đối với thuật ngữ thích hợp, chúng tôi xem xét tiêu chuẩn. Heck, thậm chí nhìn vào sách của Stroustrup. Anh ấy luôn gọi họ là hàm thành viên, chứ không phải là phương thức. –

1

Ngay cả một phương pháp có thể có giá trị trả về.

Phương thức là hàm của một lớp. Ví dụ lớp "xe" có phương pháp "tăng tốc".

+0

C++ không tạo ra sự khác biệt này. –

0

Thuật ngữ "Phương thức" không được sử dụng trong C++, nhưng thay vào đó là chức năng thành viên.

Nếu bạn đang nghĩ về sự khác biệt giữa thủ tục và chức năng thì sự khác biệt trong C++ là không có. Pascal là khá nhiều ngôn ngữ cuối cùng để làm cho sự khác biệt đó. (ADA được xây dựng sau và sử dụng thuật ngữ Thủ tục, cảm ơn Brian Neal.)

Bất kỳ chức năng, thành viên hay không, tuyên bố là không có hiệu lực, sẽ là Thủ tục trong từ vựng cũ.

Chức năng thành viên là một con thú phức tạp, hàm là một hàm đơn giản.

Một chức năng thành viên

  • là thành viên của một lớp
  • có thể tin
  • thể được bảo vệ
  • có thể tin
  • có thể ảo
  • thể tinh khiết ảo
+3

C++ không tạo nên sự khác biệt này. –

+0

@Oli phân biệt gì? –

+0

Giữa "phương thức" và "hàm". –

Các vấn đề liên quan