Clase: una clase en C++ es el bloque de construcción 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 de miembros, a los que se puede acceder y utilizar creando una instancia de esa clase. Una clase de C++ es como un modelo para un objeto.
Por ejemplo: Considere la clase de automóviles . Puede haber muchos autos con diferentes nombres y marcas, pero todos compartirán algunas propiedades comunes, como que todos tendrán 4 ruedas , límite de velocidad , rango de kilometraje, etc. Así que aquí, el auto es la clase y las ruedas, los límites de velocidad, el kilometraje son sus propiedades
- Una clase es un tipo de datos definido por el usuario que tiene miembros de datos y funciones de miembros.
- Los miembros de datos son las variables de datos y las funciones de miembros son las funciones utilizadas para manipular estas variables y, en conjunto, estos miembros de datos y funciones de miembros definen las propiedades y el comportamiento de los objetos en una clase.
- En el ejemplo anterior de la clase Car , el miembro de datos será el límite de velocidad , el kilometraje , etc. y las funciones del miembro pueden aplicar frenos , aumentar la velocidad , etc.
Un objeto es una instancia de una clase. Cuando se define una clase, no se asigna memoria, pero cuando se 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.
Declaración de objetos: cuando se define una clase, solo se define la especificación del objeto; no se asigna memoria ni almacenamiento. Para usar las funciones de datos y acceso definidas en la clase, debe crear objetos.
Sintaxis:
ClassName ObjectName;
Acceso a miembros de datos y funciones de miembros : se puede acceder a los miembros de datos y funciones de miembros de la clase usando el operador de punto (‘.’) con el objeto. Por ejemplo, si el nombre del objeto es obj y desea acceder a la función miembro con el nombre printName() , tendrá que escribir obj.printName() .
Acceso a miembros de datos
También se accede a los miembros de datos públicos de la misma manera, sin embargo, el objeto no puede 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++ program to demonstrate // accessing of data members #include <bits/stdc++.h> 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 miembro 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 operador de resolución de alcance::junto con el nombre de la clase y el nombre de la función.
// C++ program to demonstrate function // declaration outside class #include <bits/stdc++.h> 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: " << id; } }; // Definition of printname using scope resolution operator :: void Geeks::printname() { cout << "Geekname is: " << geekname; } int main() { Geeks obj1; obj1.geekname = "xyz"; obj1.id=15; // call printname() obj1.printname(); cout << endl; // call printid() obj1.printid(); return 0; }
Producción:
Geekname is: xyz Geek id is: 15
Tenga en cuenta que todas las funciones miembro definidas dentro de la definición de clase están en línea de manera predeterminada , pero también puede 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 llamadas a funciones.
Nota: Declarar una función de amigo es una forma de otorgar acceso privado a una función que no es miembro.
Los constructores son miembros de una clase especial a los que llama el compilador 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 la clase.
Hay 3 tipos de constructores:
- Constructores predeterminados
- Constructores parametrizados
- Copiar constructores
// C++ program to demonstrate constructors #include <bits/stdc++.h> 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: " <<obj1.id << endl; // obj2 will call Parameterized Constructor Geeks obj2(21); cout << "Geek id is: " <<obj2.id << endl; return 0; }
Producción:
Default Constructor called Geek id is: -1 Parameterized Constructor called Geek id is: 21
Un constructor de copias crea un nuevo objeto, que es una copia exacta del objeto existente. El compilador proporciona un constructor de copias predeterminado para todas las clases.
Sintaxis:
class-name (class-name &){}
Destructor es otra función miembro especial a la que llama el compilador cuando finaliza el alcance del objeto.
// C++ program to explain destructors #include <bits/stdc++.h> using namespace std; class Geeks { public: int id; //Definition for Destructor ~Geeks() { cout << "Destructor called for id: " << id <<endl; } }; 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
Artículos relacionados:
Este artículo es una contribución de Abhirav Kariya . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA