una programacion orientada objetos miembros metodos herencia ejemplos destructores constructores codigo clases clase c++ types theory

programacion - metodos en c++



¿Qué es un objeto escalar en C++? (3)

Según tengo entendido, los tipos fundamentales son Scalar y los arreglos son agregados, pero ¿qué pasa con los tipos definidos por el usuario? ¿Por qué criterios los dividiría en las dos categorías?

struct S { int i; int j }; class C { public: S s1_; S s2_ }; std::vector<int> V; std::vector<int> *pV = &v;


Creo que esta sería una respuesta más completa:

documento original:
http://howardhinnant.github.io/TypeHiearchy.pdf

un escalar es un elemento fundamental, excepto que no puede ser anulado, pero puede ser un tipo de puntero o un tipo de enumeración.

Y un fundamental tiene una palabra clave en el lenguaje . Es fácil de reconocer cuando se dice así.


Hay una serie de clases de biblioteca que se utilizan para probar el tipo de variables. std::is_scalar se puede usar para probar si un objeto es un escalar.

Un tipo escalar es un tipo que tiene funcionalidad incorporada para el operador de adición sin sobrecargas (aritmética, puntero, puntero de miembro, enumeración y std::nullptr_t ).

También una mesa desde here .


Versión corta: Los tipos en C ++ son:

  • Tipos de objetos: escalares, matrices, clases, uniones.

  • Tipos de referencia

  • Tipos de funciones

  • (Tipos de miembros) [ver más abajo]

  • void

Versión larga

  • Tipos de objeto

    • Escalares

      1. aritmética (integral, flotador)

      2. punteros: T * para cualquier tipo T

      3. enumerar

      4. puntero a miembro

      5. nullptr_t

    • Arrays: T[] o T[N] para cualquier tipo T completo, sin referencia

    • Clases: class Foo o struct Bar

      1. Clases triviales

      2. Agregados

      3. Clases de POD

      4. (etcétera etcétera.)

    • Uniones: union Zip

  • Tipos de referencias: T & , T && para cualquier tipo de objeto o función libre T

  • Tipos de funciones

    • Funciones gratuitas: R foo(Arg1, Arg2, ...)

    • Funciones de los miembros: RT::foo(Arg1, Arg2, ...)

  • void

Los tipos de miembros funcionan así. Un tipo de miembro tiene el formato T::U , pero no puede tener objetos o variables de tipo miembro. Solo puedes tener punteros de miembro. Un puntero miembro tiene el tipo T::* U , y es un puntero a objeto miembro si U es un tipo de objeto (libre) y una función puntero a miembro si U es un tipo de función (libre) .

Todos los tipos están completos, excepto las matrices anónimas, void tamaño y las clases y uniones declaradas pero no definidas. Se pueden completar todos los tipos incompletos, excepto el void .

Todos los tipos pueden ser const / volatile calificados.

El <type_traits> proporciona clases de rasgos para verificar cada una de estas características de tipo.