Mam klasę "dane", z konstruktorem: dane(int, int );. W jaki sposób mogę stworzyć tablicę obiektów?
Próbowałem coś takiego , ale nie dział:
dane nazwa [20] (2,3);
Mam klasę "dane", z konstruktorem: dane(int, int );. W jaki sposób mogę stworzyć tablicę obiektów?
Próbowałem coś takiego , ale nie dział:
dane nazwa [20] (2,3);
dane x[20];
for (int i=0;i<20;i++)
{
x[i] = dane(2,3);
}
np.tak?
Ale statyczną? Można tak:
dane nazwa [20] = { dane(2,3),dane(2,3),dane(2,3),dane(2,3),...};
A dynamiczna jak można bo mnie to zaintrygowało.
Jedyne co mi przyszło do głowy to
class a
{
public:
int a;
int b;
a( int c , int d)
{
a=c;
b=d;
}
};
int main()
{
a **zm = new a*[3];
zm[0] = new a(2,2);
Jest jakies inne rozwiązanie?
Nie. Nie da się wywołać innego konstruktora niż bezargumentowy.
Kolejna rzecz mnie zaintrygowała. Mianowicie wywoływanie z konstruktorów innych konstruktoróww celu inicjalizacji określonych poł. Przykład:
class a
{
public:
int f;
int b;
int c;
a( int w)
{
a( 5,5);
f=w;
}
a ( int t , int y) : b(t) , c(y)
{
}
};
int main()
{
a *zm = new a(0);;
cout<<zm->c;
wyświetla na ekranie c=0, a nie 6; Da się jakoś sprawić, aby to działało?
To nie java i nie wywoływanie super(), ale możesz pewnie zrobić tak:
a( int w):a( 5,5)
{
f=w;
}
Tez przyszła mi do głowy lista inicjalizacyjna, ale niestety kompilator ( dev) nie akceptuje takiego zapisu : class a' is not a direct base of
a'. W przypadku wywoływania a(5,5) z ciała innego konstruktora wszystko niby jest poprawnie i program faktycznie wchodzi do wywoływanego konstruktora, ale jakby ignoruje wszystkie przypisania do pol klasy.
Wszystko natomiast działa, gdy z konstruktora wywołuje zwykła metodę i tam przypisuje jakieś wartości do pól klasy.
Java znacznie lepiej rozwiązała ten problem, a szkoda.