elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


  Mostrar Mensajes
Páginas: [1]
1  Programación / Programación C/C++ / Re: Duda en constructor copia en: 2 Agosto 2011, 13:03 pm
Con Visual Studio funciona bien :xD
2  Programación / Programación C/C++ / Re: Duda en constructor copia en: 30 Julio 2011, 23:26 pm
Hola Leo, gracias por responder.

El caso es que según el libro es lo mismo.

Mira, esto también funciona:

Código
  1.  
  2. #include <iostream>
  3. #include <string>
  4.  
  5. using namespace std;
  6.  
  7. class CTest {
  8. private:
  9. int a;
  10. public:
  11. CTest() : a(0) {}
  12.  
  13. CTest(int d) : a(d) {}
  14.  
  15. CTest(const CTest& obj) {
  16. cout << "constructor copia invocado";
  17. *this = obj;
  18. }
  19.  
  20. CTest(CTest& obj) {
  21. cout << "constructor copia sin const invocado";
  22. *this = obj;
  23. }
  24.  
  25. CTest& operator=(const CTest& obj) {
  26. a = obj.a;
  27. cout << "operator= invocado";
  28. return *this;
  29. }
  30.  
  31. int getA() {
  32. return this->a;
  33. }
  34. };
  35.  
  36. int main() {
  37. CTest miObj = CTest();
  38. cout << miObj.getA() << endl;
  39.  
  40. return 0;
  41. }
  42.  


El problema está cuando quito el constructor copia que recibe la referencia al objeto constante, es decir como puse en el anterior post.

Bueno, haciendo más pruebas, si quito este constructor copia:
Código
  1. CTest(CTest& obj) {
  2. cout << "constructor copia sin const invocado";
  3. *this = obj;
  4. }
  5.  

Entonces ya funciona todo normalmente.

Lo que saco en claro es que si pongo este último, tengo que poner este otro:

Código
  1. CTest(const CTest& obj) {
  2. cout << "constructor copia sin const invocado";
  3. *this = obj;
  4. }
  5.  

Pero como digo, no lo llega a ejecutar (por las pruebas que obtengo depurándolo o con la ejecución, mensajes cout ).

¿Qué raro no?
3  Programación / Programación C/C++ / Duda en constructor copia en: 30 Julio 2011, 21:20 pm
Hola, os cuento mis paranoias con c++  :D

Código
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. class CTest {
  7. private:
  8. int a;
  9. public:
  10. CTest() : a(0) {}
  11.  
  12. CTest(int d) : a(d) {}
  13.  
  14. // CTest(const CTest& obj) {
  15. // cout << "constructor copia invocado";
  16. // *this = obj;
  17. // }
  18.  
  19. CTest(CTest& obj) {
  20. cout << "constructor copia sin const invocado";
  21. *this = obj;
  22. }
  23.  
  24. CTest& operator=(const CTest& obj) {
  25. a = obj.a;
  26. cout << "operator= invocado";
  27. return *this;
  28. }
  29.  
  30. int getA() {
  31. return this->a;
  32. }
  33. };
  34.  
  35. int main() {
  36.       CTest miObj = CTest();  /////////////////  AQUÍ ESTÁ EL ERROR
  37. cout << miObj.getA() << endl;
  38.  
  39. return 0;
  40. }
  41.  

El error:

../src/OtroCpp.cpp:36: error: no matching function for call to 'CTest::CTest(CTest)'

Según leo en el libro que estoy estudiando:

CTest miObj = CTest()

Es equivalente a

CTest miObj;

Ahora bien, si veis mi código, no funciona por culpa de poner el constructor copia con el parámetro no const, pero si quito los comentarios del constructor copia con const (el que implementa C++ por omisión) entonces funciona.

¿Por qué?

Y lo que me parece más raro todavía, es que al depurar el código y seguir instrucción a instrucción, veo que no llega a entrar en ningún momento en el constructor copia (en ninguno de los dos) y que se ejecuta directamente el constructor sin parámetros.

Al poner CTest  miObj = CTest() se llama al constructor copia? o no... pensando un poquito sobre el tema puedo entender con mis escasos conocimientos, que Ctest() crea un objeto sin nombre y lo copia a MiObj invocando al constructor copia, pero es que según mi depurador no es así.

En fin... ¿qué no soy capaz de ver/entender?

Gracias chic@s
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines