Введение
Что-то от 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с), то не должны делать особое заявление по этому поводу.
