четверг, 30 сентября 2010 г.

2. Можно ли объявлять массив объектов? А массив классов?

С массивом объектов все ясно:

class A {
public:
int x;
};

A a[3];
//либо динамически:
//A* a = new A[3];
//(важно не забыть delete[] a;)
a[0].x = 1;
a[1].x = 2;
a[2].x = 3;

std::cout << a[0].x << a[1].x << a[2].x;


Переходим к следующему подвопросу. В Delphi можно было провернуть такую штуку:

type

A = class
end;

A1 = class(A)
end;

A2 = class(A)
end;

classA = class of A;

var
classArray : array[1..2] of classA;
objArray : array[1..2] of A;
i : Integer;

begin
classArray[1] := A1;
classArray[2] := A2;
for i := 1 to 2 do
begin
objArray[i] := classArray[i].Create();
ShowMessage(objArray[i].ClassName);
end;
end;

То есть действительно реализовать некий массив классов (можно ли его так назвать?). В C++ я был не очень уверен и погуглил "массив классов". Можно сделать похожий механизм через порождающие фабрики. Но так как это не массив, в обычном понимании, и это только 2-й вопрос, то ответ - "нельзя".
А еще поиск ответа показал, что очень многие спрашивают про "массив классов" имея в виду "массив объектов". Значит первый вопрос (чем обличается класс от объекта?) вполне актуален :)

среда, 29 сентября 2010 г.

1. Что определяет класс? Чем отличается класс от объекта?

Класс определяет структуру и поведение. Объект определяет состояние (наполнение структуры) и меняет его в зависимости от поведения, заданным классом.
Вопрос "Чем отличается класс от объекта?" задает экзаменатор студенту, когда пытается вытащить его на троечку. А студент даже не открывал первую страницу отксеренных лекций. Это примерно то же самое, что спрашивать: "А чем вот этот Тузик(см. рис.) отличается от биологического подвида "собака домашняя"?".

пятница, 24 сентября 2010 г.

Большой список вопросов на знание C++

http://www.rsdn.ru/forum/cpp/1870577.1.aspx
Целых 385 вопросов. От простых до очень сложных.
Буду отвечать понемногу, и помечать топики с ответами меткой "385"