Supongo que al final terminaré quitándole el const.<div>En cuanto a lo de declarar la constante, no se si te he entendido bien, te refieres a algo como esto:</div><div><br></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px">

<div><div><font face="'courier new', monospace">int algoritmoComplejo(int i){</font></div></div><div><div><font face="'courier new', monospace">   return i*2;</font></div>
</div><div><div><font face="'courier new', monospace">}</font></div></div></blockquote><div><div><br></div></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px">
<div><div><font face="'courier new', monospace">class MiClase{</font></div></div></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px">
<blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div><div><font face="'courier new', monospace">public:</font></div></div></blockquote>
<blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div><div><font face="'courier new', monospace">  const int atributo_constante;</font></div>
</div></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div><div><font face="'courier new', monospace"><br></font></div></div>
</blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div><div><font face="'courier new', monospace">  MiClase(int argumentos) : atributo_constante(0){</font></div>
</div></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div><div><font face="'courier new', monospace">    atributo_constante = algoritmoComplejo(argumentos);</font></div>
</div></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div><div><font face="'courier new', monospace">  }</font></div></div>
</blockquote></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div><div><font face="'courier new', monospace"><br></font></div>
</div><div><div><font face="'courier new', monospace">};</font></div></div><div><font face="arial, helvetica, sans-serif"><a href="http://codepad.org/rQjjVpLY" target="_blank">Ejecutar en codepad</a> (<a href="http://codepad.org/rQjjVpLY" target="_blank">http://codepad.org/rQjjVpLY</a>)</font></div>

<div><font face="arial, helvetica, sans-serif"><br></font></div></blockquote><span class="Apple-style-span" style="font-family: arial, helvetica, sans-serif; ">Esto da error, "<span style="font-family:monospace;font-size:medium;line-height:17px;white-space:pre">assignment of read-only data-member<span style="font-family:arial, helvetica, sans-serif;line-height:normal;white-space:normal;font-size:small">". Si embargo algo como esto si funciona:</span></span></span><br>
<font class="Apple-style-span" face="arial, helvetica, sans-serif"><span class="Apple-style-span" style="line-height: 17px; white-space: pre; font-size: medium;"><span class="Apple-style-span" style="line-height: normal; white-space: normal; font-size: small;"><br>
</span></span></font><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><div><font class="Apple-style-span" face="arial, helvetica, sans-serif"><span class="Apple-style-span" style="line-height: 17px; white-space: pre; font-size: medium;"><span class="Apple-style-span" style="line-height: normal; white-space: normal; font-size: small;"><span class="Apple-style-span" style="font-family: 'Times New Roman'; font-size: medium; line-height: 17px; "><pre style="margin-top: 0,5em; margin-right: 0px; margin-bottom: 0,5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 1,1em; font-family: monospace; ">
<span class="kt" style="line-height: 13px; color: rgb(153, 102, 204); font-weight: bold; ">int</span> <span class="n">algoritmoComplejo</span><span class="p">(</span><span class="kt" style="line-height: 13px; color: rgb(153, 102, 204); font-weight: bold; ">int</span> <span class="n">i</span><span class="p">){</span>
   <span class="k" style="line-height: 13px; color: rgb(0, 51, 204); font-weight: bold; ">return</span> <span class="n">i</span><span class="o">*</span><span class="mi" style="line-height: 13px; color: rgb(0, 0, 0); ">2</span><span class="p">;</span>
<span class="p">}</span>

<span class="k" style="line-height: 13px; color: rgb(0, 51, 204); font-weight: bold; ">class</span> <span class="nc">MiClase</span><span class="p">{</span>
<span class="k" style="line-height: 13px; color: rgb(0, 51, 204); font-weight: bold; ">public</span><span class="o">:</span>
  <span class="k" style="line-height: 13px; color: rgb(0, 51, 204); font-weight: bold; ">const</span> <span class="kt" style="line-height: 13px; color: rgb(153, 102, 204); font-weight: bold; ">int</span> <span class="n">atributo_constante</span><span class="p">;</span>

  <span class="n">MiClase</span><span class="p">(</span><span class="kt" style="line-height: 13px; color: rgb(153, 102, 204); font-weight: bold; ">int</span> <span class="n">argumentos</span><span class="p">)</span> <span class="o">:</span> <span class="n">atributo_constante</span><span class="p">(</span><span class="n">algoritmoComplejo</span><span class="p">(</span><span class="n">argumentos</span><span class="p">)){</span>
     <span class="n">cout</span> <span class="o"><<</span> <span class="n">atributo_constante</span> <span class="o"><<</span> <span class="n">endl</span><span class="p">;</span>
  <span class="p">}</span>

<span class="p">};</span></pre></span></span></span></font></div></blockquote><div><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><div><font face="arial, helvetica, sans-serif"><span style="font-family:monospace;font-size:medium;line-height:17px;white-space:pre"><span style="font-family:arial, helvetica, sans-serif;line-height:normal;white-space:normal;font-size:small"><span class="Apple-style-span" style="font-family: 'Times New Roman'; font-size: medium; line-height: 17px; "><pre style="margin-top: 0,5em; margin-right: 0px; margin-bottom: 0,5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 1,1em; font-family: monospace; ">
<span class="p"><span class="Apple-style-span" style="font-family: arial, helvetica, sans-serif; line-height: normal; white-space: normal; font-size: small; "><a href="http://codepad.org/DarEDbob" target="_blank">Ejecutar en codepad</a> (<a href="http://codepad.org/DarEDbob">http://codepad.org/DarEDbob</a>)</span></span></pre>
</span></span></span></font></div></blockquote><div><font face="arial, helvetica, sans-serif"><span style="font-family:monospace;font-size:medium;line-height:17px;white-space:pre"><span style="font-family:arial, helvetica, sans-serif;line-height:normal;white-space:normal;font-size:small"><span class="Apple-style-span" style="font-family: 'Times New Roman'; font-size: medium; line-height: 17px; "><pre style="margin-top: 0,5em; margin-right: 0px; margin-bottom: 0,5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 1,1em; font-family: monospace; ">
<font class="Apple-style-span" face="arial, helvetica, sans-serif"><span class="Apple-style-span" style="line-height: normal; white-space: normal; font-size: small;">Pero en mi caso esto no es viable porque yo tengo dos atributos constantes que mi algoritmo calcula de una sola vez, y tener que inicializarlos así obliga a tener que ejecutar el algoritmo dos veces (una para cada atributo) :S</span></font></pre>
<pre style="margin-top: 0,5em; margin-right: 0px; margin-bottom: 0,5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 1,1em; font-family: monospace; "><font class="Apple-style-span" face="arial, helvetica, sans-serif"><span class="Apple-style-span" style="line-height: normal; white-space: normal; font-size: small;">Que no os mosquee tanto "secretismo" entorno a "mi algoritmo" XD, es que es bastante grande para pegarlo aquí, tendría que explicar muchas más cosas y liaría más que ayudar, por eso estoy usando estos ejemplitos simples :P . A escala reducida yo tendría que hacer algo así (o quitar el const de los atributos XD)</span></font></pre>
</span></span></span></font></div></div><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><div><div><font face="arial, helvetica, sans-serif"><span style="font-family:monospace;font-size:medium;line-height:17px;white-space:pre"><span style="font-family:arial, helvetica, sans-serif;line-height:normal;white-space:normal;font-size:small"><span class="Apple-style-span" style="font-family: 'Times New Roman'; font-size: medium; line-height: 17px; "><pre style="margin-top: 0,5em; margin-right: 0px; margin-bottom: 0,5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 1,1em; font-family: monospace; ">
<font class="Apple-style-span" face="arial, helvetica, sans-serif"><span class="Apple-style-span" style="line-height: normal; white-space: normal; font-size: small;"><span class="Apple-style-span" style="font-family: 'Times New Roman'; font-size: medium; line-height: 17px; "><pre style="margin-top: 0,5em; margin-right: 0px; margin-bottom: 0,5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 1,1em; font-family: monospace; ">
<span class="kt" style="line-height: 13px; color: rgb(153, 102, 204); font-weight: bold; ">int</span> <span class="n">algoritmoComplejo1</span><span class="p">(</span><span class="kt" style="line-height: 13px; color: rgb(153, 102, 204); font-weight: bold; ">int</span> <span class="n">atrb</span><span class="p">){</span>
   <span class="kt" style="line-height: 13px; color: rgb(153, 102, 204); font-weight: bold; ">int</span> <span class="n">val_at1</span><span class="o">=</span><span class="mi" style="line-height: 13px; color: rgb(0, 0, 0); ">0</span><span class="p">,</span><span class="n">val_at2</span><span class="o">=</span><span class="mi" style="line-height: 13px; color: rgb(0, 0, 0); ">0</span><span class="p">;</span>  <span class="c" style="line-height: 13px; color: rgb(102, 153, 51); font-style: italic; ">//valor de los atributos</span>

   <span class="k" style="line-height: 13px; color: rgb(0, 51, 204); font-weight: bold; ">for</span><span class="p">(</span><span class="kt" style="line-height: 13px; color: rgb(153, 102, 204); font-weight: bold; ">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi" style="line-height: 13px; color: rgb(0, 0, 0); ">0</span> <span class="p">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">atrb</span> <span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">){</span>
     <span class="n">val_at1</span><span class="o">++</span><span class="p">;</span>
     <span class="n">val_at2</span> <span class="o">+=</span> <span class="n">val_at1</span><span class="p">;</span>
   <span class="p">}</span>
   <span class="k" style="line-height: 13px; color: rgb(0, 51, 204); font-weight: bold; ">return</span> <span class="n">val_at1</span><span class="p">;</span>
<span class="p">}</span>

<span class="kt" style="line-height: 13px; color: rgb(153, 102, 204); font-weight: bold; ">int</span> <span class="n">algoritmoComplejo2</span><span class="p">(</span><span class="kt" style="line-height: 13px; color: rgb(153, 102, 204); font-weight: bold; ">int</span> <span class="n">atrb</span><span class="p">){</span>
   <span class="kt" style="line-height: 13px; color: rgb(153, 102, 204); font-weight: bold; ">int</span> <span class="n">val_at1</span><span class="o">=</span><span class="mi" style="line-height: 13px; color: rgb(0, 0, 0); ">0</span><span class="p">,</span><span class="n">val_at2</span><span class="o">=</span><span class="mi" style="line-height: 13px; color: rgb(0, 0, 0); ">0</span><span class="p">;</span>  <span class="c" style="line-height: 13px; color: rgb(102, 153, 51); font-style: italic; ">//valor de los atributos</span>

   <span class="k" style="line-height: 13px; color: rgb(0, 51, 204); font-weight: bold; ">for</span><span class="p">(</span><span class="kt" style="line-height: 13px; color: rgb(153, 102, 204); font-weight: bold; ">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi" style="line-height: 13px; color: rgb(0, 0, 0); ">0</span> <span class="p">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">atrb</span> <span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">){</span>
     <span class="n">val_at1</span><span class="o">++</span><span class="p">;</span>
     <span class="n">val_at2</span> <span class="o">+=</span> <span class="n">val_at1</span><span class="p">;</span>
   <span class="p">}</span>
   <span class="k" style="line-height: 13px; color: rgb(0, 51, 204); font-weight: bold; ">return</span> <span class="n">val_at2</span><span class="p">;</span>
<span class="p">}</span>

<span class="k" style="line-height: 13px; color: rgb(0, 51, 204); font-weight: bold; ">class</span> <span class="nc">MiClase</span><span class="p">{</span>
<span class="k" style="line-height: 13px; color: rgb(0, 51, 204); font-weight: bold; ">public</span><span class="o">:</span>
  <span class="k" style="line-height: 13px; color: rgb(0, 51, 204); font-weight: bold; ">const</span> <span class="kt" style="line-height: 13px; color: rgb(153, 102, 204); font-weight: bold; ">int</span> <span class="n">atributo_constante1</span><span class="p">;</span>
  <span class="k" style="line-height: 13px; color: rgb(0, 51, 204); font-weight: bold; ">const</span> <span class="kt" style="line-height: 13px; color: rgb(153, 102, 204); font-weight: bold; ">int</span> <span class="n">atributo_constante2</span><span class="p">;</span>

  <span class="n">MiClase</span><span class="p">(</span><span class="kt" style="line-height: 13px; color: rgb(153, 102, 204); font-weight: bold; ">int</span> <span class="n">argumentos</span><span class="p">)</span> <span class="o">:</span> 
     <span class="n">atributo_constante1</span><span class="p">(</span><span class="n">algoritmoComplejo1</span><span class="p">(</span><span class="n">argumentos</span><span class="p">)),</span>
     <span class="n">atributo_constante2</span><span class="p">(</span><span class="n">algoritmoComplejo2</span><span class="p">(</span><span class="n">argumentos</span><span class="p">))</span>
  <span class="p">{</span>
     <span class="n">cout</span> <span class="o"><<</span> <span class="n">atributo_constante1</span> <span class="o"><<</span> <span class="s" style="line-height: 13px; color: rgb(204, 153, 51); font-weight: bold; ">","</span> <span class="o"><<</span> <span class="n">atributo_constante2</span> <span class="o"><<</span> <span class="n">endl</span><span class="p">;</span>
  <span class="p">}</span>

<span class="p">};</span></pre><pre style="margin-right: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font class="Apple-style-span" face="arial, helvetica, sans-serif"><span class="Apple-style-span" style="font-size: small;"><a href="http://codepad.org/y6KT3iFz">Ejecutar en codepad</a> (<a href="http://codepad.org/y6KT3iFz">http://codepad.org/y6KT3iFz</a>)</span></font></pre>
<pre style="margin-right: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font class="Apple-style-span" face="arial, helvetica, sans-serif"><span class="Apple-style-span" style="font-size: small;"><br>
</span></font></pre><pre style="margin-right: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font class="Apple-style-span" face="arial, helvetica, sans-serif"><span class="Apple-style-span" style="font-size: small;">Bueno, lo dicho, terminaré quitando los const, pero de todas si encuentro alguna solución alternativa la enviaré por si a alguien le sirve o le pica la curiosidad.</span></font></pre>
<pre style="margin-right: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font class="Apple-style-span" face="arial, helvetica, sans-serif"><span class="Apple-style-span" style="font-size: small;">Muchas gracias Jose por tu ayuda.</span></font></pre>
</span></span></font></pre></span></span></span></font></div></div></blockquote><div><div><br><div class="gmail_quote">El 10 de marzo de 2010 12:26, Jose Cabrera <span dir="ltr"><<a href="mailto:josmaca@gmail.com" target="_blank">josmaca@gmail.com</a>></span> escribió:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Pues la verdad es que no, cada compilador traduce tu código de una manera, pero una vez compilado siempre va actuar de la misma forma, solo tienes que asegurarte del compilador que uses tu.<br><br>De todas formas si, a parte del constructor, no creas ninguna otra función publica desde la cual puedas modificar el valor, para todo aquello que este fuera de la clase ese valor va a ser una constante, de todas formas tengo una duda que no recuerdo si se puede hacer o no y si alguien lo sabe te podría solucionar el problema, me explico:<br>


<br>Una constante le das el valor la primera vez que la declaras<br>const int aux = 1;<br>, mi pregunta cuando creas un constructor el valor que le das se puede almacenar de igual forma en la constante?, si esto es posible podrias realizar el calculo del algortimo aparte y ingresar el valor en el constructor.<br>


<br><div class="gmail_quote">El 10 de marzo de 2010 10:55, Carlos Falgueras García <span dir="ltr"><<a href="mailto:fark.zano@gmail.com" target="_blank">fark.zano@gmail.com</a>></span> escribió:<div><div></div><div>

<br><blockquote class="gmail_quote" style="border-left:1px solid rgb(204, 204, 204);margin:0pt 0pt 0pt 0.8ex;padding-left:1ex">
Gracias por responder Jose!<br>
<br>
En principio este atributo sólo se modifica en el constructor de la<br>
clase, y por esto lo quiero declarar constante.<br>
Mi única duda es: ¿Puedo garantizar que el atributo se modifique use<br>
el compilador que use?<br>
<br>
En el curso se dice que en algunos compiladores (DevC++ en concreto),<br>
aún utilizando const_cast, la variable no se modifica. ¿Ocurre lo<br>
mismo con los atributos de una clase?<br>
<br>
El 10/03/10, Jose Cabrera <<a href="mailto:josmaca@gmail.com" target="_blank">josmaca@gmail.com</a>> escribió:<br>
<div><div></div><div>> El atributo esta dentro de una clase con lo cual únicamente se podrá<br>
> modificar desde dentro de esa clase, o con una clase amiga, si aun así<br>
> necesitas que sea constante, desde mi punto de vista ya esta muy protegido<br>
> por la clase, creo que el único método que te queda es el const_cast, y aun<br>
> así tendrías que hacerlo con una función publica.<br>
><br>
> El 9 de marzo de 2010 21:58, Carlos Falgueras García<br>
> <<a href="mailto:fark.zano@gmail.com" target="_blank">fark.zano@gmail.com</a>>escribió:<br>
><br>
>> ¡Hola a todos!<br>
>><br>
>> Escribo para pediros vuestra opinión sobre el uso de const_cast para<br>
>> cambiar el valor de una constante, en concreto un atributo constante de<br>
>> una<br>
>> clase cualquiera. Se que el valor de los atributos constantes de una clase<br>
>> debe pasarse en los inicializadores(no estoy seguro de que se llamen así<br>
>> :S) del constructor, pero en mi caso me resulta imposible pues el valor de<br>
>> estos lo calculo con un algoritmo complejo.<br>
>><br>
>> Os ilustro con un ejemplo sencillo:<br>
>><br>
>> class MiClase{<br>
>><br>
>> private:<br>
>><br>
>> const int atributo_constante;<br>
>><br>
>> public:<br>
>><br>
>> MiClase(int argumentos) : atributo_constante(0){<br>
>><br>
>> int* p = const_cast<int*>(&atributo_constante);<br>
>><br>
>><br>
>> //Complejo algoritmo<br>
>><br>
>> int aux=0;<br>
>><br>
>> aux += argumentos*2;<br>
>><br>
>> //Supuesto cambio de valor<br>
>> *p=aux;<br>
>><br>
>> }<br>
>><br>
>> };<br>
>><br>
>> He leído en el curso de<br>
</div></div>>> cconclase<<a href="http://c.conclase.net/curso/index.php?cap=042#CAS_const" target="_blank">http://c.conclase.net/curso/index.php?cap=042#CAS_const</a>>que esto<br>
<div>>> puede no cambiar realmente el valor de la constante dependiendo del<br>
>> compilador. ¿Es esto siempre así, aún refiriéndonos a un atributo y no a<br>
>> una<br>
>> clase?<br>
</div>>> He comprobado que funciona como se espera en codepad <<a href="http://codepad.org" target="_blank">http://codepad.org</a>>,<br>
<div><div></div><div>>> aquí tenéis el link: <a href="http://codepad.org/aU9WAXYF" target="_blank">http://codepad.org/aU9WAXYF</a><br>
>><br>
>> Si la respuesta es que esto es desaconsejable, inútil o "deberías estar<br>
>> loco para hacer algo así" , os agradecería que me indicarais si existe<br>
>> alguna otra forma de hacer esta asignación;<br>
>><br>
>> P.D.: Por supuesto quiero obcecadamente que mi atributo sea constante XD<br>
>><br>
>> ¡Muchas gracias de antemano!<br>
>><br>
>> _______________________________________________<br>
>> Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net" target="_blank">Cconclase@listas.conclase.net</a><br>
>> <a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
>> Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br>
>><br>
><br>
<br>
_______________________________________________<br>
Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net" target="_blank">Cconclase@listas.conclase.net</a><br>
<a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br>
</div></div></blockquote></div></div></div><br>
<br>_______________________________________________<br>
Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net" target="_blank">Cconclase@listas.conclase.net</a><br>
<a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br></blockquote></div><br></div>
</div>