В чем идея доступа к приватным атрибутам внутри main? Java x C++

При использовании C++ не разрешается обращаться к приватному атрибуту внутри функции main. Пример:

#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;
}

Понятно, почему возникает ошибка при обращении к приватным атрибутам вне методов класса, поскольку в C++ нет главных функций внутри классов.

Однако в Java это разрешено:

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);
    }
}

Я понимаю, что в данном случае main находится ВНУТРИ класса Test. Однако я не могу понять, ПОЧЕМУ это разрешено, и каково влияние этого на разработку/управление кодом.

Когда я изучал C++, я однажды услышал: "Классы не должны иметь main. Main действует с экземплярами классов или использует их".

Может ли кто-нибудь пролить свет на этот вопрос?

5
задан Moacir Ponti 29 February 2012 в 12:44
поделиться