Giả sử có 2 class là ClassA và ClassB, mỗi class đều có file .h và .cpp tương ứng và bạn muốn sử dụng ClassA trong ClassB. Theo cách thông thường, bạn sẽ phải include header file của ClassA trong cả file .h và .cpp của ClassB
Trong ClassB.h ta include trực tiếp file ClassA.h →
1 2 3 4 5 6 7 8 9 10 |
//This is the header file of ClassB: ClassB.h #include "ClassA.h" class ClassB { public: ClassB(){}; ~ClassB(){}; SampleMethod(ClassA* a); //... } |
Trong ClassB.cpp include ClassB.h →
1 2 3 4 5 |
//This is the implementation file of ClassB: ClassB.cpp #include "ClassB.h" // include ClassB.h means also include ClassA.h //ClassB's methods implementations goes here... |
vì ClassA.h đã được include trong ClassB.h nên ClassA.h cũng đã được include trong ClassB.cpp
Tuy nhiên có một điều mà các bạn nên biết, đó là file .cpp của ClassB thì luôn luôn cần include file .h của ClassA nhưng file .h của ClassB thì không phải lúc nào cũng cần thiết phải include file .h của ClassA. Việc include thừa nếu không thực sự cần thiết sẽ làm tốn thời gian biên dịch chương trình.
Nếu trong file ClassB.h chúng ta chỉ tham chiếu đến ClassA thông qua con trỏ hoặc biến tham chiếu của hàm mà không gọi đến bất cứ phương thức (bao gồm cả constructor) hay truy cập bất cứ thuộc tính của nào ClassA thì chúng ta có thể sử dụng tính năng Forward Declaration của C++ thay vì include file .h của ClassA.
Trong file ClassB.h ta thêm khai báo sau
1 |
class ClassA; //This is a Forward Declaration of ClassA |
↓
1 2 3 4 5 6 7 8 9 10 |
//This is the header file of ClassB: ClassB.h class ClassA; //This is a Forward Declaration of ClassA class ClassB { public: ClassB(){}; ~ClassB(){}; SampleMethod(ClassA* a); //... } |
1 2 3 4 5 6 |
//This is the implementation file of ClassB: ClassB.cpp #include "ClassA.h" #include "ClassB.h" //ClassB's methods implementations goes here... |
— Author: Phạm Minh Tuấn (Shun) —