The form of what you are trying to do is:
DS1820 probe[MAX_PROBES] = {probe(p27,p28), probe(p27,p28), … for each member in the array}
But this assumes you know at coding time how many class object members are going to be in the array and you seem to want the number to be dynamic.
You could take the initialization out of the constructor and call a member function to set the values:
DS1820 probe[MAX_PROBES];
...
for (int i = 0; i < MAX_PROBES; i++)
probe[i].Set_Pins(p27,p28);
...
Where Set_Pins is an additional member function to set the pin numbers instead of the constructor.
You could also write a macro, but you probably should just use an array of class object pointers instead of actual objects, unless there is some memory management issue:
const int MAX_PROBES = 16;
DS1820* probe[MAX_PROBES];
for (int i = 0; i < MAX_PROBES; i++)
probe[i] = new DS1820(p27,p28);
Harry
DS1820 probe1(p27, p28);
const int MAX_PROBES = 16;
DS1820 probe[MAX_PROBES](p27,p28);