Common Project Structure:
project/
├── MyClass.h // Header file (declarations)
├── [Link] // Implementation file (definitions)
├── [Link] // Main program
└── Makefile // Build script (optional)
1. MyClass.h (Header file - declarations)
#ifndef MYCLASS_H
#define MYCLASS_H
class MyClass {
private:
int data;
public:
MyClass(int value); // Constructor declaration
void setData(int value);
int getData() const;
void display() const;
};
#endif
2. [Link] (Implementation file - definitions)
#include "MyClass.h"
#include <iostream>
// Constructor definition
MyClass::MyClass(int value) : data(value) {}
// Method definitions
void MyClass::setData(int value) {
data = value;
}
int MyClass::getData() const {
return data;
void MyClass::display() const {
std::cout << "Data: " << data << std::endl;
3. [Link] (Main program)
#include "MyClass.h"
#include <iostream>
int main() {
MyClass obj(42);
[Link]();
[Link](100);
std::cout << "New data: " << [Link]() << std::endl;
return 0;
Compilation:
Using g++:
# Compile all .cpp files together
g++ -o myprogram [Link] [Link]
# Or compile separately and link
g++ -c [Link]
g++ -c [Link]
g++ -o myprogram main.o MyClass.o
Using CMake:
# [Link]
cmake_minimum_required(VERSION 3.10)
project(MyProject)
add_executable(myprogram [Link] [Link])
Benefits of Separation:
1. Modularity: Each class is self-contained
2. Reusability: Classes can be reused in different projects
3. Compile-time: Only changed files need recompilation
4. Organization: Cleaner, more maintainable code
5. Collaboration: Multiple developers can work simultaneously
Key Points:
Header files (.h/.hpp): Contain declarations (class interface)
Source files (.cpp): Contain implementations
[Link]: Contains the main() function and program entry point
Include guards (#ifndef/#define/#endif) prevent multiple inclusions
Always include the corresponding header in the implementation file