Prediga la salida de los siguientes programas C++.
Pregunta 1
template <class S, class T> class Pair { private: S x; T y; /* ... */ }; template <class S> class Element { private: S x; /* ... */ }; int main () { Pair <Element<int>, Element<char>> p; return 0; }
Producción:
Compiler Error: '>>' should be '> >' within a nested template argument list
Cuando usamos plantillas anidadas en nuestro programa, debemos poner un espacio entre dos corchetes angulares de cierre, de lo contrario, entra en conflicto con el operador >>. Por ejemplo, el siguiente programa compila bien.
template <class S, class T> class Pair { private: S x; T y; /* ... */ }; template <class S> class Element { private: S x; /* ... */ }; int main () { Pair <Element<int>, Element<char> > p; // note the space between '>' and '>' return 0; }
Pregunta 2
#include<iostream> using namespace std; class Test { private: static int count; public: static Test& fun(); }; int Test::count = 0; Test& Test::fun() { Test::count++; cout<<Test::count<<" "; return *this; } int main() { Test t; t.fun().fun().fun().fun(); return 0; }
Producción:
Compiler Error: 'this' is unavailable for static member functions
este puntero no está disponible para los métodos de miembros estáticos en C++, ya que los métodos estáticos también se pueden llamar utilizando el nombre de la clase. De manera similar, en Java, los métodos de miembros estáticos no pueden acceder a this y super (super es para la clase base o principal).
Si hacemos fun() no estático en el programa anterior, entonces el programa funciona bien.
#include<iostream> using namespace std; class Test { private: static int count; public: Test& fun(); // fun() is non-static now }; int Test::count = 0; Test& Test::fun() { Test::count++; cout<<Test::count<<" "; return *this; } int main() { Test t; t.fun().fun().fun().fun(); return 0; }
Producción:
Output: 1 2 3 4
Escriba comentarios si encuentra que alguna de las respuestas/explicaciones es incorrecta, o si desea compartir más información sobre los temas discutidos anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA