Bảng sau cho thấy sự khác biệt giữa Chức năng Ảo và Chức năng Ảo thuần túy:
| Chức năng ảo | Chức năng ảo thuần túy |
|---|---|
| Hàm ảo có định nghĩa của chúng trong lớp. | Hàm ảo thuần túy không có định nghĩa. |
| Khai báo:virtual funct_name (parameter_list) {. . . . .}; | Khai báo:virtual funct_name (parameter_list) =0; |
| Nó không có khái niệm về lớp dẫn xuất. | Nếu một lớp chứa ít nhất một hàm thuần ảo, thì nó được khai báo là trừu tượng. |
| Nếu được yêu cầu, lớp cơ sở có thể ghi đè một hàm ảo. | Trong trường hợp lớp dẫn xuất hàm thuần ảo chắc chắn phải ghi đè hàm thuần ảo. |
chức năng ảo
Mã mẫu
#include <iostream>
using namespace std;
class B {
public:
virtual void s() //virtual function {
cout<<" In Base \n";
}
};
class D: public B {
public:
void s() {
cout<<"In Derived \n";
}
};
int main(void) {
D d; // An object of class D
B *b= &d;// A pointer of type B* pointing to d
b->s();// prints"D::s() called"
return 0;
} Đầu ra
In Derived
chức năng ảo thuần túy
Mã mẫu
#include<iostream>
using namespace std;
class B {
public:
virtual void s() = 0; // Pure Virtual Function
};
class D:public B {
public:
void s() {
cout << " Virtual Function in Derived class\n";
}
};
int main() {
B *b;
D dobj; // An object of class D
b = &dobj;// A pointer of type B* pointing to dobj
b->s();// prints"D::s() called"
} Đầu ra
Virtual Function in Derived class