Clase en C++ es el componente básico que conduce a la programación orientada a objetos. Es un tipo de datos definido por el usuario, que contiene sus propios miembros de datos y funciones miembro, a los que se puede acceder y utilizar creando una instancia de esa clase. Una clase C++ es como un modelo para un objeto. Por ejemplo: considere la clase de Carros . Puede haber muchos autos con diferentes nombres y marcas, pero todos compartirán algunas propiedades comunes como todos tendrán. 4 ruedas , Límite de velocidad , rango de kilometraje, etc. Así que aquí, el automóvil es la clase y las ruedas, los límites de velocidad y el kilometraje son sus propiedades.
- Una clase es un tipo de datos definido por el usuario que tiene miembros de datos y funciones miembro.
- Los miembros de datos son las variables de datos y las funciones miembro son las funciones utilizadas para manipular estas variables juntas; estos miembros de datos y funciones miembro definen las propiedades y el comportamiento de los objetos en una clase.
- En el ejemplo anterior de clase Auto , el miembro de datos será Límite de velocidad , kilometraje, etc, y las funciones miembro pueden ser aplicando frenos , velocidad creciente, etc.
Un Objeto es una instancia de una clase. Cuando se define una clase, no se asigna memoria, pero cuando se crea una instancia (es decir, se crea un objeto), se asigna memoria.
Definición de clase y declaración de objetos
Una clase se define en C++ usando la palabra clave class seguida del nombre de la clase. El cuerpo de la clase se define dentro de las llaves y termina con un punto y coma al final.
Declarar objetos
Cuando se define una clase, sólo se define la especificación del objeto; no se asigna memoria ni almacenamiento. Para utilizar los datos y las funciones de acceso definidas en la clase, es necesario crear objetos.
Sintaxis
ClassName ObjectName;>
Acceso a miembros de datos y funciones de miembros : Se puede acceder a los miembros de datos y funciones miembro de la clase utilizando el operador punto ('.') con el objeto. Por ejemplo, si el nombre del objeto es objeto y desea acceder a la función miembro con el nombre imprimirNombre() entonces tendrás que escribir obj.printName() .
Acceso a miembros de datos
También se accede a los miembros de datos públicos de la misma manera, aunque el objeto no permite acceder directamente a los miembros de datos privados. El acceso a un miembro de datos depende únicamente del control de acceso de ese miembro de datos. Este control de acceso lo dan los modificadores de acceso en C++. Hay tres modificadores de acceso: público, privado y protegido .
C++
aleatorio c
// C++ program to demonstrate accessing of data members> #include> using> namespace> std;> class> Geeks {> >// Access specifier> public>:> >// Data Members> >string geekname;> >// Member Functions()> >void> printname() { cout <<>'Geekname is:'> << geekname; }> };> int> main()> {> >// Declare an object of class geeks> >Geeks obj1;> >// accessing data member> >obj1.geekname =>'Abhi'>;> >// accessing member function> >obj1.printname();> >return> 0;> }> |
>
>Producción
Geekname is:Abhi>
Funciones de miembros en clases
Hay 2 formas de definir una función miembro:
- Definición de clase interna
- Definición de clase externa
Para definir una función miembro fuera de la definición de clase tenemos que usar el resolución de alcance:: operador junto con el nombre de la clase y el nombre de la función.
C++
// C++ program to demonstrate function> // declaration outside class> > #include> using> namespace> std;> class> Geeks> {> >public>:> >string geekname;> >int> id;> > >// printname is not defined inside class definition> >void> printname();> > >// printid is defined inside class definition> >void> printid()> >{> >cout <<>'Geek id is: '>< } }; // Definition of printname using scope resolution operator :: void Geeks::printname() { cout <<'Geekname is: '< } int main() { Geeks obj1; obj1.geekname = 'xyz'; obj1.id=15; // call printname() obj1.printname(); cout << endl; // call printid() obj1.printid(); return 0; }> |
>
>Producción
barra de herramientas de acceso rápido de word
Geekname is: xyz Geek id is: 15>
Tenga en cuenta que todas las funciones miembro definidas dentro de la definición de clase son por defecto en línea , pero también puedes hacer que cualquier función que no sea de clase esté en línea usando la palabra clave en línea con ellas. Las funciones en línea son funciones reales, que se copian en todas partes durante la compilación, como una macro de preprocesador, por lo que se reduce la sobrecarga de las llamadas a funciones.
Nota: Declarar un función amigo es una forma de dar acceso privado a una función que no es miembro.
Constructores
Constructores son miembros de clase especiales a los que el compilador llama cada vez que se crea una instancia de un objeto de esa clase. Los constructores tienen el mismo nombre que la clase y pueden definirse dentro o fuera de la definición de clase. Hay 3 tipos de constructores:
- Constructores predeterminados
- Constructores parametrizados
- Copiar constructores
C++
// C++ program to demonstrate constructors> #include> using> namespace> std;> class> Geeks> {> >public>:> >int> id;> > >//Default Constructor> >Geeks()> >{> >cout <<>'Default Constructor called'> << endl;> >id=-1;> >}> > >//Parameterized Constructor> >Geeks(>int> x)> >{> >cout <<>'Parameterized Constructor called '><< endl;> >id=x;> >}> };> int> main() {> > >// obj1 will call Default Constructor> >Geeks obj1;> >cout <<>'Geek id is: '>< // obj2 will call Parameterized Constructor Geeks obj2(21); cout <<'Geek id is: ' < return 0; }> |
>
>
nueva línea pitónProducción
Default Constructor called Geek id is: -1 Parameterized Constructor called Geek id is: 21>
A Constructor de copias crea un nuevo objeto, que es una copia exacta del objeto existente. El compilador proporciona un constructor de copia predeterminado para todas las clases.
Sintaxis:
class-name (class-name &){}> Destructores
Destructor es otra función miembro especial que el compilador llama cuando finaliza el alcance del objeto.
C++
// C++ program to explain destructors> #include> using> namespace> std;> class> Geeks> {> >public>:> >int> id;> > >//Definition for Destructor> >~Geeks()> >{> >cout <<>'Destructor called for id: '> << id < } }; int main() { Geeks obj1; obj1.id=7; int i = 0; while ( i <5 ) { Geeks obj2; obj2.id=i; i++; } // Scope for obj2 ends here return 0; } // Scope for obj1 ends here> |
>
>Producción
Destructor called for id: 0 Destructor called for id: 1 Destructor called for id: 2 Destructor called for id: 3 Destructor called for id: 4 Destructor called for id: 7>
Dato interesante (concepto poco común y conocido)
¿Por qué ponemos punto y coma al final de la clase?
Mucha gente podría decir que es una sintaxis básica y que deberíamos poner un punto y coma al final de la clase como lo define su regla en cpp. Pero la razón principal por la que hay punto y coma al final de la clase es que el compilador comprueba si el usuario está intentando crear una instancia de la clase al final de la misma.
Sí, al igual que la estructura y la unión, también podemos crear la instancia de una clase al final, justo antes del punto y coma. Como resultado, una vez que la ejecución llega a esa línea, crea una clase y asigna memoria a su instancia.
C++
#include> using> namespace> std;> > class> Demo{> >int> a, b;> >public>:> >Demo()>// default constructor> >{> >cout <<>'Default Constructor'> << endl;> >}> >Demo(>int> a,>int> b):a(a),b(b)>//parameterised constructor> >{> >cout <<>'parameterized constructor -values'> << a <<>' '><< b << endl;> >}> > }instance;> > > int> main() {> > >return> 0;> }> |
módulos de resorte
>
>Producción
Default Constructor>
Podemos ver que hemos creado una instancia de clase de Demo con el nombre instancia, como resultado, el resultado que podemos ver es que se llama al Constructor Predeterminado.
De manera similar, también podemos llamar al constructor parametrizado simplemente pasando valores aquí.
C++
#include> using> namespace> std;> > class> Demo{> >public>:> >int> a, b;> >Demo()> >{> >cout <<>'Default Constructor'> << endl;> >}> >Demo(>int> a,>int> b):a(a),b(b)> >{> >cout <<>'parameterized Constructor values-'> << a <<>' '><< b << endl;> >}> > > > }instance(100,200);> > > int> main() {> > >return> 0;> }> |
>
>Producción
conexiones en java
parameterized Constructor values-100 200>
Entonces, al crear una instancia justo antes del punto y coma, podemos crear la instancia de la clase.
Artículos relacionados:
- Herencia múltiple en C++
- Pure Virtual Destructor
- Prueba de C++