2012-02-14 64 views
12

thể trùng lặp:
Why pure virtual function is initialized by 0?"= 0;" là gì? làm gì khi khai báo các hàm ảo thuần túy trong C++?

Tôi biết rằng, để khai báo một hàm ảo thuần tuý bạn cần phải sử dụng "= 0;" cú pháp, như vậy:

class Foo 
{ 
protected: 
    Foo(); 
    virtual int getValue() = 0; 
}; 

Câu hỏi của tôi là, chính xác (trong hoạt động bên trong của trình biên dịch) thực hiện "= 0;" cú pháp làm gì? Liệu nó có thực sự thiết lập con trỏ hàm bằng không? Nó có phục vụ như không có gì hơn là một tuyên bố về ý định, giống như từ "trừu tượng" trong Java và C#, và nếu vậy, tại sao không thêm một từ dành riêng như "trừu tượng" vào ngôn ngữ thay vì sử dụng cú pháp phức tạp như vậy?

+0

Câu hỏi này được trả lời [ở đây] (http://stackoverflow.com/questions/2156634/why-pure-virtual-function-is-initialized-by-0). – Nerdtron

+6

Vì từ khóa 'pure' sẽ quá dễ đọc đối với các lập trình viên C++. – orlp

+0

@nightcracker: Bjarne Stroustrup thận trọng với các từ khóa theo ngữ cảnh (tức là các từ định danh chỉ là từ khóa trong một số ngữ cảnh chứ không phải từ ngữ khác) và đúng như vậy vì nó làm cho khó hiểu hơn một chút (tức là bạn không thể nói không phải không có ngữ cảnh của nó). Tôi không thể đổ lỗi cho điều này. Tuy nhiên, ông cũng cảnh giác về việc giới thiệu các từ khóa đầy đủ, và điều này mang lại tất cả những sử dụng kỳ lạ đó ('tĩnh' !!!!). –

Trả lời

1

Nó khai báo chức năng 'thuần ảo'. Các = 0 là về cơ bản giống như một từ khóa 'thuần túy' khác. Câu hỏi này có liên quan đến bạn: Why is a pure virtual function initialized by 0?

Một hàm ảo thuần tuý không có người thân ở tất cả và phải được xác định bởi bất kỳ lớp học mà được thừa hưởng nó: http://www.learncpp.com/cpp-tutorial/126-pure-virtual-functions-abstract-base-classes-and-interface-classes/

0

Đó nghĩa rằng không có "mặc định" thực hiện. Bất kỳ lớp dẫn xuất nào cần phải thực hiện nó.

+1

Lưu ý rằng các hàm ảo thuần túy có thể thực hiện. – Griwes

0

Nó buộc bạn phải xác định nó trong một lớp con.

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