Để thi đua Java interface
, bạn có thể sử dụng một cơ sở thông thường với chức năng ảo chỉ thuần túy.
Bạn cần sử dụng thừa kế ảo, nếu không bạn có thể nhận được thừa kế lặp lại: cùng một lớp có thể là lớp cơ sở nhiều lần trong C++. Điều này có nghĩa là quyền truy cập của lớp cơ sở này sẽ không rõ ràng trong trường hợp này.
C++ không không cung cấp tương đương chính xác của Java interface
: trong C++, trọng một hàm ảo chỉ có thể được thực hiện trong một lớp được thừa kế của lớp với phần khai báo hàm ảo, trong khi ở Java, overrider cho một phương pháp trong một interface
có thể được khai báo trong một lớp cơ sở.
[VÍ DỤ:
struct B1 {
void foo();
};
struct B2 {
virtual void foo() = 0;
};
struct D : B1, B2 {
// no declaration of foo() here
};
D
kế thừa quá tờ khai chức năng: B1::foo()
và B2::foo()
.
B2::foo()
là thuần ảo, vì vậy D::B2::foo()
cũng vậy; B1::foo()
không ghi đè B2::foo()
vì B2
không phải là lớp bắt nguồn là B1
.
Do đó, D
là lớp trừu tượng.
--end dụ]
Dù sao, tại sao bạn bắt chước các giới hạn độc đoán của Java trong C++?
EDIT: ví dụ được thêm để làm rõ.
C++ hỗ trợ đầy đủ [đa thừa kế] (http://en.wikipedia.org/wiki/Multiple_inheritance), vì vậy không có sự phân biệt giữa các lớp và giao diện như trong Java. Nếu bạn tạo một lớp với tất cả các phương thức ảo thuần túy thì nó tương đương với một giao diện Java. – DaoWen
Lớp trừu tượng chỉ với các hàm thành viên ảo thuần túy. – oldrinb
Cũng xem xét từ khóa '__interface' của VC++. kiểm tra MSDN. – MasterMastic