2010-03-26 33 views
14

Tôi có mã sau bên trong tệp .h và tôi không chắc câu lệnh gán sẽ làm gì và nó được gọi đúng cách như thế nào?Tệp tiêu đề C++ và khai báo hàm kết thúc bằng "= 0"

virtual void yield() = 0; 

Tôi nghĩ rằng hàm trả về giá trị 0 theo mặc định nhưng vì hàm này trả về void, tôi hơi bối rối một chút. Bất cứ ai có thể bình luận về điều này và có thể nói làm thế nào tôi có thể tham khảo nhiệm vụ này, tôi có nghĩa là làm thế nào nó được gọi là trong thuật ngữ C + +?

Cảm ơn.

+2

đọc về các chức năng ảo. –

+1

Và để biết thông tin về lý do tại sao cú pháp lạ này được sử dụng, hãy xem http://stackoverflow.com/questions/2156634/why-pure-virtual-function-is-initialized-by-0 –

Trả lời

18

Đây là chức năng ảo thuần túy. Điều này có nghĩa, các lớp con phải thực hiện hàm này, nếu không chúng sẽ trừu tượng, nghĩa là bạn không thể tạo các đối tượng của lớp đó.

class ISomeInterface { 
public: 
    virtual std::string ToString() = 0; 
} 

class SomeInterfaceImpl : public ISomeInterface { 
public: 
    virtual std::string ToString() { 
     return "SomeInterfaceImpl"; 
    } 
} 

Ý tưởng là, một lớp có thể trưng ra một phương pháp nhất định, nhưng các lớp con phải triển khai nó. Trong ví dụ này, ISomeInterface cho thấy phương thức ToString, nhưng không có triển khai mặc định hợp lý cho điều đó, vì vậy nó làm cho phương thức ảo thuần túy. Các lớp con như SomeInterfaceImpl sau đó có thể cung cấp triển khai phù hợp.

+0

Bạn đã giải thích chức năng ảo thuần túy là gì. OP hỏi "= 0" làm gì? Bạn đã không trả lời câu hỏi đó. –

+0

OP hỏi * "nó được gọi như thế nào trong thuật ngữ C++?" * - câu trả lời này được trả lời trong câu đầu tiên của câu trả lời của tôi. Nếu bạn cảm thấy rằng điều này cần giải thích thêm, vui lòng chỉnh sửa câu trả lời của tôi, thêm câu trả lời của riêng bạn hoặc giải thích trong nhận xét. –

+0

Ok. Đủ công bằng. Tôi đã bị nhầm lẫn bởi "= 0", nhưng, nghĩ rằng tôi đã kết thúc tìm ra điều này. Các "= 0" là những gì nói với trình biên dịch sẽ không có một cơ thể cho các chức năng, điều này, làm cho nó một "tinh khiết ảo". Chính xác? –

3

nếu là một phương pháp ảo tinh khiết (aka trừu tượng) trông đây hoặc google http://www.artima.com/cppsource/pure_virtual.html

= 0 không có nghĩa là giá trị trả về mặc định, nó được thông báo chức năng đó là tinh khiết ảo

+1

Không, nó không phải là - nó chỉ ra chức năng là tinh khiết. Các hàm ảo thuần túy có thể có các phần tử. –

+0

Vậy chúng khác với ảo như thế nào? – Andrey

+0

Họ ngăn chặn các lớp học có chứa chúng từ instatiated. –

8

Cú pháp khai báo một = 0pure virtual function, không có gì liên quan đến giá trị trả về.

Nếu lớp có chứa ít nhất một hàm ảo thuần túy, làm cho lớp "trừu tượng", điều đó có nghĩa là lớp đó không thể được khởi tạo.

Trong thực tế, các lớp như vậy cần được cụ thể hóa bằng cách phân lớp và triển khai (các) chức năng ảo.

0

Cú pháp tối nghĩa, nhưng "= 0" biểu thị phương thức là hàm ảo thuần túy. Nó làm cho lớp trừu tượng (bạn không thể khởi tạo nó) và nó được thực hiện để lại các lớp dẫn xuất.

Điều này được sử dụng khi tất cả những gì bạn muốn xác định là giao diện. Sử dụng các từ khóa ảo khi bạn muốn xác định một giao diện và cũng cung cấp một thực hiện mặc định.

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