Sự khác biệt giữa chức năng ảo thuần và ảo

Tác Giả: Laura McKinney
Ngày Sáng TạO: 2 Tháng Tư 2021
CậP NhậT Ngày Tháng: 11 Có Thể 2024
Anonim
Sự khác biệt giữa chức năng ảo thuần và ảo - Công Nghệ
Sự khác biệt giữa chức năng ảo thuần và ảo - Công Nghệ

NộI Dung


Cả hai chức năng ảo và chức năng ảo thuần túy là các khái niệm về đa hình thời gian chạy. Sự khác biệt chính giữa ‘chức năng ảoFunction chức năng ảo thuần túy đó là function chức năng ảo có định nghĩa của nó trong lớp cơ sở và cũng là các lớp dẫn xuất kế thừa xác định lại nó. Hàm ảo thuần túy không có định nghĩa trong lớp cơ sở và tất cả các lớp dẫn xuất kế thừa phải xác định lại nó.

Tuy nhiên, hàm ảo còn được gọi là công văn động và công văn thời gian chạy, do chức năng được gọi được chỉ định trong thời gian chạy phù hợp với loại đối tượng được sử dụng.

Đa hình được hỗ trợ bởi cả hai ngôn ngữ C ++ và Java. Trong Java, thuật ngữ này ghi đè lên bản quyền được sử dụng thay vì function hàm ảo, vì hàm ảo là thuật ngữ của C ++.


  1. Biểu đồ so sánh
  2. Định nghĩa
  3. Sự khác biệt chính
  4. Phần kết luận

Biểu đồ so sánh

Cơ sở để so sánhChức năng ảoChức năng ảo thuần túy
Căn bảnHàm ảo có định nghĩa của chúng trong lớp cơ sở.Hàm ảo thuần túy không có định nghĩa trong lớp cơ sở.
Tờ khaiảo func_name (tham số_list) {. . . . .};ảo func_name (tham số_list) = 0;
Lớp có nguồn gốcTất cả các lớp dẫn xuất có thể hoặc không thể ghi đè chức năng ảo của lớp cơ sở.Tất cả các lớp dẫn xuất phải ghi đè chức năng ảo của lớp cơ sở.
Hiệu ứng

Các chức năng ảo được phân cấp trong tự nhiên; nó không ảnh hưởng đến việc biên dịch nếu bất kỳ lớp dẫn xuất nào không ghi đè hàm ảo của lớp cơ sở.Nếu tất cả các lớp dẫn xuất không ghi đè chức năng ảo của lớp cơ sở, lỗi biên dịch sẽ xảy ra.
Lớp trừu tượngKhông có khái niệm.Nếu một lớp chứa ít nhất một hàm ảo thuần túy, thì nó được khai báo là trừu tượng.


Định nghĩa hàm ảo

Các chức năng ảo là hàm thành viên của lớp cơ sở và nó được định nghĩa lại bởi các lớp dẫn xuất kế thừa lớp cơ sở. Không cần thiết rằng tất cả các lớp dẫn xuất kế thừa phải xác định lại hàm ảo, nó chỉ được định nghĩa lại bởi các lớp dẫn xuất có thể yêu cầu chức năng của nó. Một hàm ảo được tạo bằng cách khai báo hàm trong lớp cơ sở có trước từ khóa ’Ảo.

Tờ khai :

lớp cơ sở {công khai: loại ảo funt_name (danh sách tham số) {. . . }};

Các lớp dẫn xuất kế thừa có thể định nghĩa lại hàm ảo mà không cần bất kỳ từ khóa ’ảo nào. Các lớp dẫn xuất xác định lại hàm ảo để hoàn thành nhiệm vụ của nó. Vì hàm ảo được định nghĩa lại trong các lớp dẫn xuất, chúng ta có nhiều dạng của cùng một hàm. Bây giờ, phiên bản nào của hàm đang được gọi, phụ thuộc vào loại đối tượng nào được gọi để gọi hàm đó.

Kế thừa đa cấp

Trong thừa kế đa cấp, trong đó một lớp dẫn xuất đã kế thừa hàm ảo từ lớp cơ sở của nó, khi chính nó được sử dụng làm lớp cơ sở cho một lớp dẫn xuất khác, hàm ảo vẫn có thể bị ghi đè. Vì vậy, khi một chức năng ảo được kế thừa, bản chất ảo của nó cũng được kế thừa.

Các hàm ảo về bản chất cũng được phân cấp, tức là nếu một lớp dẫn xuất không ghi đè / xác định lại hàm ảo được kế thừa từ lớp cơ sở và khi đối tượng lớp lớp dẫn xuất gọi hàm ảo đó, thì hàm ảo được xác định bởi lớp cơ sở được gọi.

Định nghĩa hàm ảo thuần túy

Như đã thấy ở trên nếu lớp dẫn xuất không ghi đè hàm ảo thì hàm ảo được xác định bởi lớp cơ sở được sử dụng. Nhưng, chuyện gì sẽ xảy ra nếu bản thân lớp cơ sở không xác định hàm ảo. Nhiều lần, lớp cơ sở không có định nghĩa cho hàm ảo hoặc đôi khi bạn muốn rằng tất cả các lớp dẫn xuất phải ghi đè hàm ảo.

Để xử lý hai tình huống trên, C ++ hỗ trợ khái niệm vềChức năng ảo thuần túySọ. Một virtual hàm ảo thuần túy được khai báo trong lớp cơ sở nhưng không có định nghĩa của nó trong lớp cơ sở. Hàm ảo thuần túy được khai báo như sau.

loại ảo func_name (tham số_list) = 0;

Bất cứ khi nào một hàm ảo trong lớp cơ sở được tạo ra tinh khiết, thì mỗi lớp dẫn xuất phải ghi đè lên hàm ảo thuần túy của lớp cơ sở. Nếu lớp dẫn xuất không ghi đè hàm ảo thuần túy của lớp cơ sở, nó sẽ dẫn đến lỗi biên dịch.

Lớp trừu tượng

Lớp chứa ít nhất một hàm thuần túy được gọi là class lớp trừu tượng. Không có đối tượng của các lớp trừu tượng có thể được tạo, nhưng bạn có thể tạo các tham chiếu và con trỏ tới các lớp trừu tượng. Các thành viên của các lớp trừu tượng có thể được truy cập thông qua đối tượng của các lớp dẫn xuất kế thừa lớp cơ sở trừu tượng.

Một lớp mà bạn muốn khai báo trừu tượng, sử dụng từ khóa 'trừu tượng' ở phía trước của 'lớp học' từ khóa.

// ví dụ tên lớp trừu tượng {. . loại ảo func_name (tham số_list) = 0; . . };

  1. Các hàm ảo được xác định chắc chắn trong lớp cơ sở và được định nghĩa lại (ghi đè) trong lớp dẫn xuất. Mặt khác, hàm ảo thuần, lớp cơ sở đặc biệt không được định nghĩa trong lớp cơ sở
  2. Lớp dẫn xuất nếu được yêu cầu xác định lại (ghi đè) hàm ảo trong khi đó, trong trường hợp lớp dẫn xuất của hàm ảo thuần phải xác định lại chắc chắn hàm ảo thuần.
  3. Nếu lớp dẫn xuất không xác định lại (ghi đè) hàm ảo, nó có thể sử dụng hàm ảo của lớp cơ sở. Ngược lại, nếu một lớp dẫn xuất không ghi đè hàm ảo thuần thì xảy ra lỗi biên dịch.
  4. Lớp cơ sở chứa hàm ảo có thể được khởi tạo tức là đối tượng của nó có thể được tạo. Ngược lại, lớp cơ sở chứa hàm ảo thuần túy, tức là một lớp trừu tượng không thể được khởi tạo vì một lớp trừu tượng không được định nghĩa đầy đủ.

Chú thích:
Nguyên mẫu của chức năng ảo, và chức năng ảo thuần túy, vẫn giữ nguyên trong suốt chương trình.

Phần kết luận:

Cả 'hàm ảo' và 'hàm ảo thuần' đều có tầm quan trọng của chúng, như trong 'hàm ảo', tất cả các lớp dẫn xuất không cần xác định lại hàm ảo và ở đó chúng ta muốn tất cả các lớp dẫn xuất nên xác định lại hàm ảo, thuần ảo chức năng tốt nhất áp dụng ở đó.