Hoy estuve creando mi primer programa en c++
He leído todo lo necesario, aun no logro comprender apuntadores y constructores xDD
Así que estaré molestando por este subforo :P
Pero hay algo que no he podido hacer y no entiendo (ademas de lo ya mencionado) por más que busco.
¿Cómo rayos paso un valor leído por teclado a un método?.
Las clases con las que estoy trabajando son, Empresa, Empleado, Directivo, Cliente y Persona
Tengo lo siguiente.
Empresa.h
#ifndef EMPRESA
#define EMPRESA
#include<string.h>
/* Clase empresa*/
class Empresa {
//Atributos
private:
char* empresa;
char direccion;
char telefono;
//Metodos
public:
//Empresa(char* empresa, char direccion, char telefono);
//~Empresa();
void EstablecerNombreEmpresa(char* empresa);
void EstablecerDireccionEmpresa(char direccion);
void EstablecerTelefonoEmpresa(char telefono);
char* ObtenerNombreEmpresa();
char ObtenerDireccionEmpresa();
char ObtenerTelefonoEmpresa();
void RegistrarEmpresa(char* empresa, char direccion, char telefono);
};
void Empresa::EstablecerNombreEmpresa(char* empresa) {
empresa = empresa;
}
char* Empresa::ObtenerNombreEmpresa() {
return empresa;
}
void Empresa::EstablecerDireccionEmpresa(char direccion) {
direccion = direccion;
}
char Empresa::ObtenerDireccionEmpresa() {
return direccion;
}
void Empresa::EstablecerTelefonoEmpresa(char telefono) {
telefono = telefono;
}
char Empresa::ObtenerTelefonoEmpresa() {
return telefono;
}
void Empresa::RegistrarEmpresa(char* empresa, char direccion, char telefono) {
//Guardar en lista
}
main.cpp
#include <iostream>
#include "Empresa.h"
#include <cstring>
using namespace std;
int main() {
//Declaracion de objeto Empresa
Empresa miEmpresa;
//Declarion variables
char emp;
cout << "Escribe el nombre de la empresa" << endl;
cin>>emp;
miEmpresa.EstablecerNombreEmpresa(emp);
return (0);
}
Esta parte es mi duda.
cout << "Escribe el nombre de la empresa" << endl;
cin>>emp;
miEmpresa.EstablecerNombreEmpresa(emp);
Cómo obtengo la variable para pasarla como parámetro?.
Por cierto en java y php en los setters y getters se manejan los this
Ejemplo php
Class User {
...
private $name;
....
fuction setName($name) {
this->$name=$name;
}
Cual es el equivalente en C++, es que me gusta trabajarlo así xD
Gracias
en C++ la clase por defecto para almacenar cadenas de texto es la clase string. char* es un puntero. Los punteros simplemente "apuntan" a una posición de memoria, que es donde se almacena la información importante.
Los punteros permiten gestionar información de forma "remota":
int dato = 20;
// Declaras un puntero, pero no apunta a nada en concreto, no esta incializado
int* puntero1;
// Ahora puntero1 apunta al valor de dato, cualquier cambio en puntero1 modificara el valor de dato
puntero1 = &dato;
*puntero1 = 30;
std::cout << dato << endl; // imprime 30
En tu caso, los punteros no apuntan a nada en concreto, luego el programa te va a fallar.
Los constructores son funciones especiales que se llaman automáticamente cuando se crean instancias de los objetos.
class Objeto
{
public:
Objeto( )
{ std::cout << "Objeto creado" << std::endl; }
};
int main( )
{
Objeto objeto;
return 0;
}
Este programa tiene como salida:
Objeto creado
Porque al crearse la instancia "objeto", se llama al constructor de "Objeto" automáticamente y este es el que imprime el mensaje. Los constructores permiten inicializar los valores de la clase para evitar que ésta tenga valores no válidos.
Los constructores tienen más historia, pero es mejor ir poco a poco.
En cuanto a tu código, si no quieres usar strings y prefieres char* tienes dos opciones:
// Te permite almacenar una cadena de 19 caracteres máximo
// La memoria la libera el programa automaticamente
char cadena[20];
// Te permite almacenar una cadena de 19 caracteres,
// pero luego tienes que acordarte de liberar la memoria con delete
char *cadena = new char[20];
Aunque lo más práctico suele ser usar la clase string, ya que te permite obviar la gestión de la memoria ( que ya te tocará pegarte con ella en otras partes del código ).
string cadena;
cin >> cadena;
Y bueno, si puedo por la mañana te escribo más que me están metiendo prisa.
Un saludo.
eferion
Muchas gracias por tu explicación, aunque ya lo había leído, solo que supongo que los apuntadores van más allá de lo que explicas.
Cuando inicie con el programa estaba utilizando string, solo que después miraba ejemplos en donde usaban char* xD y pensaba que era lo más correcto. Investigué sobre el * y entonces entendí que era para especificar que ese tipo de dato era un apuntador.
En cuanto a los constructores supongo que también puedes especificar un constructor con parametros como en otros lenguajes.
Seguiré con la aplicación, cualquier duda comento aquí mismo o en otro hilo dependiendo.
Nuevamente gracias!
En C++ el this se escribe igual.