No del todo.
Una clase es "como un tipo de datos" en el sentido de que es una plantilla para la creación de un objeto, pero no es un objeto que puede usar.
Cuando utiliza esa plantilla para crear una instancia de un objeto, puede hacer uso de ese objeto. Puede crear tantas instancias como desee; puede pensar en esas instancias como variables.
Por ejemplo:
class Person
{
public:
Person() : name("Joe Bloggs") {}
std::string getName() { return name; }
void setName(std::string n) { name = n; }
private:
std::string name;
};
Esta es una definición de clase para una persona. No es una variable. No puede llamar a setName porque aún no existe. Pero cuando lo hace:
int main()
{
Person p, q;
p.setName("Jill Bloggs");
q.setName("Bob King");
std::cout << p.getName() << " " << q.getName() << std::endl;
}
Se crearon dos casos de personas que se pueden asignar a, el cambio, y el uso - que son variables denominadas casos.
No tengo idea de qué significa "forma de datos", ignórelo.
En cuanto a la declaración, la declaración indica que una instancia de algo estará presente. Por ejemplo, si estuviera creando una clase, y el archivo de cabecera tenía:
class foo
{
public:
foo(int value);
void bar();
private:
int x;
};
Usted está declarando que tiene un bar llamado función que devuelve void y que tiene un entero llamado x.
No se asigna memoria para la variable, x, y no se proporciona ninguna definición o barra, por lo que son solo declaraciones. El archivo de origen probablemente proporcionar la definición del bar como:
void foo::bar()
{
//some code
}
y una definiton constructor para foo que inicializar x con un valor y controlar cómo se creó (con una lista de inicialización):
foo::foo(int value) : x(value)
{
//some code
}
¿Por qué tantos downvotes? – TeaOverflow
No lo sé; Pensé que las preguntas serían simples de responder y me tomé el tiempo para escribir las preguntas para que pudieran ser devueltas de manera eficiente. – Ayfiaru
Creo que es un poco duro. Si ya está leyendo un libro y está confundido, son preguntas válidas. –