Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - digimikeh

#61
Entiendo!.. gracias por contestar!

He estado observando en el libro que estoy estudiando otras cosas que no me parecen (yo a pesar de ser un poco novato) muy comprensibles...

Luego me puse a indagar sobre las Erratas del libro y me tope con esto:
http://www.stroustrup.com/4th_printing3.html

Como verán en la pagina 74 (que es justo el punto que quería discutir en este post), en realidad el problema es por una cuestion de impresion, es decir, lo que esta escrito en la pagina 74 fue sin intencion (por algun minuto se me paso que podia ser asi y que se habia cometido un error)..


Dice:
pg 74, top: s/new double[sz]/new double[a.sz]/

...por lo que new double[a.sz] tiene mucho mas sentido que lo anterior...

Saludos!
#62
Programación C/C++ / Error C2662 - const
7 Julio 2019, 18:15 PM
Hola amigos..

En el siguiente código, si yo quito la palabra const (línea 52) derivada de un template tipo C, el programa corre....


Link -> https://onlinegdb.com/SyW1F9kWS
Hagan clic en Fork para probar el código.

Estuve buscando por què pasa esto, segun el compilador no pudo realizar una conversion de un tipo que no es const a uno que es const...  entiendo que quitando la palabra const se acaba el problema, pero por que?.. y si no deseo retirar la palabra const donde mas debería agregarla para que pueda compilar?... (Pasa que el libro que estudio aparece con const, ero no veo diferencia realmente con lo que tengo).

Gracias.




Bueno, según un usuario de discord, me dijo que las funciones begin() y end() deben ser const también, y efectivamente colocándolas asi compiló correctamente.

Pero es curioso porque en el libro que estudio, dichas funciones no son const..

Ahora mismo estoy investigando por que´.




Si yo coloco las funciones begin() y end() como funciones no miembro, es decir, fuera de la clase o estructura, el compilador no las detecta...

Lnik -> https://onlinegdb.com/SJgL5ayZH


Debe forzosamente ser funciones miembro?

EI: NO HAGAS DOBLE POST NUEVAMENTE, SERA BORRADO.
#63
Entonces en tal caso no sería mejor inicializar tam y luego iArray con tam? o colocar primero en el campo privado del struct a tam y en la siguiente línea al array...
#64
ok, el compilador determina esto siempre y cuando se este evaluando la línea actual o no?

Edit: Ya me quedo claro gracias.!
#65
Hola amigos. que tal.

Tengo el siguiente caso:
Código (cpp) [Seleccionar]


#include <iostream>
#include <initializer_list>

struct x {
private:
    int * iArray = nullptr;
    int tam;       //Sin inicializar

public:
    x(std::initializer_list<int> lst) : iArray{new int[lst.size()}, tam{lst.size()}{
         std::copy(lst.begin(), lst.end(), iArray);
    }

    //Constructor de copia
    x(const x & otherX);
 
};

//Definición de constructor de copia (notar aquí que al momento de hacer
//la primera inicialización tam no ha recibido valor.
x::x(const x & otherX) : iArray{new int[tam]}, tam{otherX.tam}{
    for (int y = 0; y < tam; ++y){
         iArray[y] = otherX.iArray[y];
    }
}

int main (){
    x x0 {2, 4, 6};
    x x1 = x0;   //copia correcta...

    //prueba directa de asignacion de una variable no definida a un array dinamico:

    int x;
    int * arr = new int[x];     //error, x no está definida.
}


Como se puede observar, en la linea 22 se está inicializando el array dinamico con un tamaño de tam antes que inicializar al mismo tam, o sea, se esta inicializando con un valor desconocido...  sin embargo, esta funcionando bien, ahora bien, en la linea 35, se esta intentando crear un array dinamico con un tamaño x, pero no sirvio.... acaso la inicialización funciona distinto a la asignacion?

Gracias, saludos.

#66
Programación C/C++ / Re: que editor usan
24 Junio 2019, 19:15 PM
Vim
#67
Entiendo, ya me va quedando todo mas claro... gracias por las respuestas..

Vaya Stroustup, que le gusta complicar las cosas, pero supongo que es para mejor...
#68
Hola, tendre en cuenta esa convención de las variables, gracias.
puede ser de la siguiente forma?:

Código (cpp) [Seleccionar]

int un_numero = 6;


o es mejor asi? :

Código (cpp) [Seleccionar]

int unNumero = 6;



Respecto a la autoasignacion del operador =, C++ lo hara para todos los tipos creados por el usuario que no haya recargado el operador = ? o tiene distinciones ?..

Saludos y gracias.

#69
Buenas..

Me ha causado extrañeza la forma en que se puede inicializar un tipo a traves de un argumento al constructor:

Código (cpp) [Seleccionar]

struct s {
private:
int x = 0;
public:
s(int _x) : x{ _x } {}
void p() const { std::cout << x; }
int getx() const { return x; }
};

int main() {
s _s(5);                                       //forma argumento a constructor 1
s _t = 6;                                     //forma argumento a constructor 2
s _u{ 7 };                                   //forma argumento a constructor 3
s _v = { 8 };                              //forma argumento a constructor 4

std::cout << std::endl;
std::cout << _s.getx() << std::endl; //salida : 5
std::cout << _t.getx() << std::endl; //salida : 6
std::cout << _u.getx() << std::endl; //salida : 7
std::cout << _v.getx() << std::endl; //salida : 8
return 0;
}


Siempre he inicializado un tipo (que reciba un argumento de constructor) con los parentesis, es decir, tal como sale en la salida 5, es decir:
Código (cpp) [Seleccionar]

s _s(5);



Sin embargo, estaba convencido que la siguiente linea solo tenia como fin la asignacion de un valor:
Código (cpp) [Seleccionar]

s _t = 6;


Me ha parecido curioso porque se supone que una asignacion por regla general debe tener el mismo tipo que el asignado... sin embargo, el tipo s no es un entero.


Entonces me pregunto si esa linea realmente es una asignacion o lleva otro nombre....



#70
@#Loretz.. efectivamente, olvide darle un valor por default en el constructor.
Respecto al puntero this, pues si, es que el código es borrador, lo hago nada mas que para fines de practica... en un reléase, el this lo utilizo siempre y cuanod tenga dos o mas variables que tengan el mismo nombre..

Aproposito, muchas gracias por compartir lo de la regla de 3...
creo que defintivamente tengo que echarle una repasadita al constructor de copia ademas..


#@String Manolo, pues si, solo que como el puntero d es privado, estoy accediendo con el getter..