Saltar al contenido

¿Qué es exactamente un objeto en C++?

Nuestros desarrolladores estrellas agotaron sus reservas de café, en su búsqueda día y noche por la resolución, hasta que Juan encontró la solución en Gogs así que en este momento la comparte aquí.

Solución:

los C++11 estándar es bastante claro:

1.8 El modelo de objetos de C++ [ intro.object ]

Un objeto es una región de almacenamiento. [ Note: A function is not an object, regardless of whether or not it occupies storage in the way that objects do. — end note ]

Eso es todo. Un objeto es un fragmento de memoria en el que se pueden almacenar datos.

Si tú lo piensas OO o Oobjeto OLa orientación tiene más sentido cuando te das cuenta de que en los viejos tiempos los programas estaban organizados en torno a las funciones que operaban sobre los objetos (o datos).

El término “objeto” estaba alrededor largo antes de orientación a objetos.

Qué orientación a objetos hizo fue cambiar la organización del programa de estar organizada en torno a las funciones a estar organizada en torno a los datos en sí – el objetos.

De ahí el término orientado a objetos.

Cambio de paradigma.

Aquí vemos el cambio de paradigma de los viejos tiempos:

struct my_object

    int i;
    char s[20];
;

void function(my_object* o)

    // function operates on the object (procedural / procedure oriented)

A lo que tenemos ahora:

struct my_object

    void function()
    
        // object operates on itself (Object Oriented)
    

    int i;
    char s[20];
;

No criticar las respuestas existentes, pero les falta un elemento (podría decirse que es un defecto estándar).

Un objeto es una región de almacenamiento. [ Note: A function is not an object, regardless of whether or not it occupies storage in the way that objects do. — end note ]

Un objeto es creado por un definición ([basic.def]), por un nueva expresión ([expr.new]) o por la implementación ([class.temporary]) cuando sea necesario.

Las propiedades de un objeto se determinan cuando se crea el objeto.

Un objeto es una región de almacenamiento. en que ha tenido lugar la construcción. De hecho, la mayoría de las veces, “objeto” se refiere a esa entidad construida, con su valor y estado, mientras que “almacenamiento” solo significa la memoria (o lo que sea) en la que está escrito.

La diferencia puede ser un simple detalle:

// `s` names an object that has been constructed... somewhere.
// That storage will live exactly as long as necessary to back `s`
// as long as the object exists -- no need to worry about it.
std::string s = "hello";

// Using the object
std::cout << s << 'n';

Pero también puede (aunque rara vez es útil) separar la vida útil del objeto de la vida útil de su almacenamiento:

// `storage` points at a chunk of... storage.
// It hasn't been initialized, nor does it have a type.
void *storage = malloc(sizeof(std::string));

// Now we constructed an `std::string`:
// we have an actual object inhabiting the storage!
std::string *s = new (storage) std::string("hello");

// Using the object, through the pointer we have
std::cout << *s << 'n';    

// Now we destruct the object: it exists no more.
s->~basic_string();

// Now we destroy the storage.
free(storage);

Debo enfatizar que este último ejemplo es solo para fines de demostración. Es una técnica que probablemente no encontrará y se ha realizado aquí sin ningún tipo de comprobación de errores. No intentes esto en casa 🙂

Ahora, ¿cómo se relaciona con el "objeto" OOP? Bueno... en absoluto. "Objeto" es un muy término genérico, y los fundadores de OOP simplemente optaron por usarlo también, de forma independiente.

Respuesta corta

De https://timsong-cpp.github.io/cppwp/n3337/intro.object

Un objeto es una región de almacenamiento.


Una respuesta un poco más larga

En OOP y OOD tradicionales, un objeto se usa para describir una clase de objetos algunas veces y para una instancia de una clase algunas veces.

En C++, class y struct representan clases.

Un objeto en C++ puede ser una instancia de un class o un struct pero también puede ser una instancia de un tipo fundamental.

Algunos ejemplos simples:

int i;

i es un objeto Está asociado a una región de almacenamiento que puede ser utilizada por el programa.

struct foo  int a; int b;;
foo f;

f es también un objeto. También está asociado con una región de almacenamiento que puede ser utilizada por el programa.

int* ptr = new int[200];

ptr es un puntero que apunta a 200 objetos de tipo int. Esos objetos también están asociados con una región de almacenamiento que puede ser utilizada por el programa.

Aquí tienes las comentarios y calificaciones

Te invitamos a sostener nuestro trabajo fijando un comentario o puntuándolo te estamos eternamente agradecidos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *