Al usar C++ no se permite el acceso a un atributo privado dentro de una función principal. Ejemplo:¿Cuál es la idea detrás del acceso de atributos privados dentro de main? Java x C++
#include <iostream>
using namespace std;
class Test {
private: int a;
public:
Test(int value) { a = value; }
int getValue() { return a; }
};
int main (int argc, char *argv[]) {
Test test2(4);
cout << test2.a; // Compile error! Test::a is private within this context
cout << test2.getValue(); // OK!
return 0;
}
Está claro por qué hay un error al acceder a los atributos privados fuera de los métodos de clase, ya que C++ no tienen funciones principales dentro de las clases.
Sin embargo, en Java se permite:
public class Test {
private int a;
public Test(int value) { a = value; }
public int getValue() { return a; }
public static void main (String args[]) {
Test test1 = new Test(4);
System.out.println(test1.a);
}
}
entiendo en este caso principal está dentro de la clase de prueba. Sin embargo, no puedo entender la idea de POR QUÉ está permitido, y cuál es el impacto de esto en el desarrollo/administración del código.
Cuando el aprendizaje de C++, una vez oído "Las clases no deben tener un plato principal. Principal actúa con o usa instancias de clases".
¿Alguien puede arrojar algo de luz sobre esta pregunta?
'main' prácticamente tiene que vivir dentro de una clase en Java, ya que sería ilegal que viva fuera de una clase. No hay un alcance global para las funciones en Java. – Dervall
Siempre acabo de tener el punto de entrada principal en una clase con nada más que la función principal. Realmente no tiene sentido tener el principal en una clase para mí tampoco. – L7ColWinters
Por las respuestas hasta ahora, creo que esta fue una elección de los desarrolladores de lenguaje: no hacer excepciones a Main(), incluso si se tratara de una función especial, otorgando el acceso que tendría cualquier otro método. –