Введение
Что-то от Java или Visual Basic? Нет, это – managed C++!
public _gc class Man // Эта строка ничем не отличается от C++ { private: //=== String – новый мощный класс для работы с текстом String *m_Name; // Имя int m_Age; // Возраст public: //==== Конструкторы Man () { m_Name = S "Dummy"; m_Age = 0; } Man (String* n, <strong>int</strong> a) { m_Name = n; m Age = a; } //==== Два метода доступа к закрытым данным String* GetName() { return m_Name; } int GetAge () { return m_Age; } };
Теперь опробуйте работу нового управляемого типа данных – объектов класса Man, в условиях управляемого кода.
void main () { //=== Создаем двухмерный массив указателей //=== на объекты класса Man Man * men[,] = new Man *[2, 2]; //=== Как вам нравится новый (управляемый) синтаксис? //=== Инициализируем один элемент массива men [1.1] = new ManC'Alex Black ",54); <strong>//===</strong> Мы можем задавать вопросы объекту men Console::WriteLine (men › Count); Console::WriteLine (men › Rank); Console::WriteLine (men[l, 1] › GetName ()); Console::WriteLine (men [1, 1] › GetAge ()); }
Программа выведет следующий текст:
4 2 Alex Black 54
Пока мы видим только новый синтаксис и возможность задавать вопросы динамическому массиву. Но теперь попробуйте вставить код с ошибками алгоритмического плана и запустите на выполнение.
for (int i=0; i<5; i++) Console::WriteLine(men[i,i] › GetName());
Если вы на предложение отладить код ответите отказом, то в окне будет выведен такой текст:
Exception occurred: System.NullReferenceException: Attempted to dereference a null object reference. at Man.GetName() in с:\man\man.cpp:line 27 at main() in с:\man\man.cpp:line 61
Такое поведение программы в ситуации с типичной ошибкой разработчика, безусловно, следует признать более надежным. Оно даст возможность значительно сэкономить наше время в будущем. Отметьте, что если вы не хотите пользоваться услугами автоматического сборщика мусора (_gс), то не должны делать особое заявление по этому поводу.