Classes, Objects, Static Members, Friend Functions & Friend Classes
Idea in plain words
Class encapsulates private implementation and public interfaces. Objects are runtime instances.
Exam tip
High-yield exam topic (Very High).
Explanation
Classes in C++ separate interface from implementation. While strict encapsulation prohibits external functions from probing private state, cooperating abstractions (such as Matrix and Vector classes, or custom stream operators) require controlled structural access, which friend functions provide without exposing internals globally.
Key points
- Static Data Members: Shared across all instances of a class; stored in static/global memory; must be defined outside class body; initialized before main().
- Static Member Functions: Can only access static data members and invoke static member functions; do not have a this pointer.
- Friend Functions: Non-member functions granted access to private and protected members via friend declaration.
- Friend Class: All member functions of the friend class have full access to private members of the granting class.
Example
Example
Static member count keeps track of total active player objects in a multiplayer game: Player p1, p2; Player::getCount() returns 2.
Code examples
// Static Members & Friend Function Demonstration
#include <iostream>
using namespace std;
class Complex; // Forward declaration
class Calculator {
public:
void printSum(Complex c1, Complex c2);
};
class Complex {
private:
float real, imag;
static int objectCount; // Shared static variable
public:
Complex(float r = 0, float i = 0) : real(r), imag(i) { objectCount++; }
static int getCount() { return objectCount; } // Static member function
// Friend function declaration
friend Complex addComplex(const Complex &a, const Complex &b);
friend void Calculator::printSum(Complex c1, Complex c2);
};
int Complex::objectCount = 0; // Definition outside class
Complex addComplex(const Complex &a, const Complex &b) {
return Complex(a.real + b.real, a.imag + b.imag); // Accesses private members directly
}
Exam questions
- [8 Marks] What is a friend function? Explain its characteristics, syntax, and scenarios where friend functions are necessary.
- [7 Marks] Explain static data members and static member functions with a working C++ program.
- [7 Marks] Write a C++ program to add two private attributes of two different classes using a common friend function.