Presentamos la clave para conocer cómo funcionan las clases en C ++, considerando que admite programación orientada a objetos.
Cómo funcionan las clases en C ++
C ++ tiene varios tipos incorporados (como bool, int, floats, y así sucesivamente). Cada uno de estos tipos tiene varias características (por ejemplo, el tamaño y la ocupación de memoria). Los operadores tienen diferentes significados para cada tipo.
Por ejemplo: el operador ‘+’ agrega ints, flotadores y dobles:
int x = 5;
int y = 6;
int z= x+y;//z==11
Sin embargo, si usamos el operador ‘+’ con cadenas, concatena esas cadenas.
string s1 = “abhilekh”;
string s2 = “gautam”;
string s3=s1+s2;//s3 will be abhilekhgautam
Aquí, x, y y z representan un número entero, mientras que s1, s2 y s3 representan cadenas. Entonces x, y y z son objetos de tipo int. Mientras tanto, s1, s2 y s3 son objetos de tipo string.
Pero, ¿y si queremos tener un tipo que represente objetos en nuestra vida diaria? ¿Cómo se podría representar un automóvil, libros, animales, etc.? Por eso necesitamos clases.
Una clase es un tipo definido por el usuario. Esto significa que se puede definir los propios tipos como ints, floats y chars. Se puede definir operadores para los tipos y establecer varias propiedades para los propios tipos.
Las clases funcionan de la siguiente manera:
class Book{
string author_name,title;
int no_of_pages,edition_no;
//…
};
Se ha creado una clase llamada libro que debe tener un autor, un título y páginas; estos son los miembros de nuestra clase. Aquí, book representa una entidad que tiene esas características.
Pero crear el propio tipo no será útil hasta que tengamos un objeto de ese tipo. ¿Entonces cómo hacemos eso?
int x;//x is an object of type x.
Book y;//y is an object of type Book
La única diferencia aquí es que x es un objeto de tipo incorporado (es decir, int) e y es un objeto del tipo Libro (Libro es un tipo definido por el usuario, definido por el que lo creo).
¿Qué son las funciones tipo miembro en C ++?
Las funciones declaradas en una clase son funciones tipo miembro. Solo pueden ser invocados por el objeto de la clase en la que se define la función.
Se puede actualizar el Book en nuestra clase:
class Book{
//..
public:
void update_edition(int edition);
//..
};
update_edition es una función miembro de nuestro libro de clase. Podemos definir nuestra función de dos formas: dentro de la clase y fuera de la clase.
Funcionan de la siguiente manera:
/*Inside class declaration*/
class Book{
//..
public:
void update_edition(int edition){
//Define your function
edition_no = edition;
}
};
/* Outside Class declaration*/
void Book::update_edition(int edition){
//Define your function here
//..
}
Entonces, ¿qué hay sobre la función?
Book y;//y is an object of type Book
y.update_edition(5);
Hay que recordar que solo los objetos de tipo Libro pueden invocar la función. Una llamada desde objetos de cualquier otro tipo resultará en un error sintáctico.
Una función miembro (no estática) siempre conoce el objeto para el que fue invocada y puede referirse de esta manera:
void Book::update_edition(int edition){
this->edition_no = edition;
}
Tipos de funciones miembro en C ++
Hay varios tipos de funciones miembro en C ++.
Funciones de miembros constantes
class Book{
//..
public:
//..
int display_edition() const{
return edition_no;
}
//..
};
La palabra const indica que esta función no cambia el estado de la función.
Cambiar el estado de la función miembro constante resultará en un error.
int Book::book_edition() const{
edition_no = edition_no + 1;//error:cannot change value in constant function
}
Funciones de miembros estáticos
Si hay una función miembro que necesita acceso a los miembros de la clase pero no necesita ser invocada por todos los objetos de esa clase, se debe declarar como estática.
Tales funciones serán parte de la clase pero no serán parte del objeto.
class Book{
//..
public:
static void my_static_func();
};
Se puede hacer referencia a un miembro estático sin utilizar un objeto.
void Book::my_static_func(){
//define here.
}
La palabra clave estática no debe repetirse en la declaración de función. Las funciones miembro estáticas no tienen acceso al puntero this.
Funciones amigas
Las funciones amigas no están dentro del alcance de una clase y no tienen acceso a this.
class Book{
//..
public:
//..
void check();
void display();
//..
};
class E_book{
//..
public:
//..
friend void Book::check();
};
Aquí, la función miembro check de la clase Book es amiga de la clase E_book.
Si queremos que las funciones miembro de una clase sean amigas de otra clase, podemos usar la siguiente sintaxis:
class E_book{
//…
public:
//..
friend class Book;
};
Ahora todas las funciones de la clase Book son amigas de la clase E-book.
Especificadores de acceso
Si tiene experiencia en C, es posible que recuerde haber creado su propio tipo usando la palabra clave struct.
struct Book{
char author_name[20];
char title[20];
int no_of_page,edition_no;
};
Book b1;//b1 is an object of type Book
La estructura es un tipo definido por el usuario. De hecho, la estructura es un tipo de clase que tiene todos sus miembros públicos por defecto.
Hay que recordar que la etiqueta:public: que usamos en uno de nuestros fragmentos de código anteriores se llama un especificador de acceso.
Entonces, ¿cuál es la diferencia entre especificadores de acceso público y privado?
Se dice que los miembros después de una etiqueta son miembros privados. Esto significa que solo se puede acceder a ellos mediante la función miembro de esa clase. Si no se proporciona ninguna etiqueta, es privada de forma predeterminada.
Por otro lado, los miembros de la etiqueta public son accesibles en todas partes.
Estos especificadores se utilizan con el propósito de ocultación, extracción y encapsulación de datos.
Constructores
Un constructor es una función miembro que se utiliza para inicializar un objeto. Se ejecuta un constructor cada vez que se crea un objeto de ese tipo de clase.
El nombre de la función constructora es el mismo que el nombre de la clase y tampoco tiene ningún tipo de retorno.
class Book{
//..
public:
//Constructor
Book(){ //no return type and name same as the class name
//define constructor here
}
};
Puede haber varios constructores de una clase porque puede haber varias funciones con el mismo nombre referidas como sobrecarga de funciones.
Destructores
El destructor libera la memoria ocupada por el objeto. Simplemente destruye el objeto. El ~símbolo (tilde) denota un destructor.
class Book{
//..
public:
//constructor
//..
//destructor
~Book(){
//destroy object here
}
};
Al usar estos conceptos de clase en c ++, puede crear nuevos tipos (tipos propios) que se pueden usar convenientemente como tipos integrados.
Leíste: Cómo funcionan las clases en C ++, te recomendamos: Cómo escribir código HTML más rápido
Te invitamos a que nos sigas en nuestras redes sociales: Facebook, Twitter, Instagram y Youtube con el perfil: @tortugacode