Requisitos:
Un char es un único carácter, como puede ser la letra 'a', la 'e', el '3', una exclamación ('!'), etc. Por ejemplo:
char letra = 'A';
Fíjate que pongo la A entre comillas simples, no dobles. Las comillas dobles indican que lo que hay entre comillas es un conjunto elementos, donde cada uno de estos elementos es un char, mientras que al poner comillas simples se indica que lo que hay entre las comillas simples es un único carácter.
¿Para qué puede interesar un tipo de variable diferente para una única letra? Para poder realizar operaciones con ella. Me explico: Los ordenadores sólo entienden de 0s y 1s, es decir, de números. Por eso todas las letras y caracteres tienen un número interno asociado que es el que realmente conoce el ordenador. Esta tabla de equivalencias entre cada carácter y su número interno asociado es la tabla ASCII:

Por ejemplo verás que la letra 'A' (mayúscula) es el número 65, y que la 'a' (minúscula) es el 97. Y que la 'Z' es el 90 y la 'z' es el 122.
Por lo tanto, a cualquier letra minúscula, si le resto 32, ¡la convierto en mayúscula! Por ejemplo, si hago:
char letra = 'o';
letra = letra - 32;
cout << letra;
Muestra por pantalla “O”. Y si hago
string nombre = "juan";
nombre[0] = nombre[0] - 32;
Muestra por pantalla "Juan".
Poner un número como “32” es lo que se llama poner un “número mágico”, porque no hay ninguna explicación en el código de por qué se ha puesto este número en particular (y es mágico porque con 32 funciona pero no funciona con 31 ni con 33 ni con ningún otro número). Esto es una mala práctica porque dificulta el análisis del código. Es más elegante hacer lo siguiente:
nombre[0] = nombre[0] - 'a' + 'A';
Al hacer "nombre[o] - 'a'" estamos obteniendo el número que ocupa la letra en el alfabeto (en el caso de la J está en la posición 10 del alfabeto) y al sumarle 'A' obtenemos la letra mayúscula en esa posición del alfabeto.

Añadir nuevo comentario