Wcześniej w książce było napisane, że nie można stosować takiej praktyki tyle że wysyłając do tablicy/wektora po prostu obiekty, ponieważ rozmiary obiektów mogą się nie zgadzać i będą źle indeksowane.
Nie można stworzyć tablicy/wektora obiektów różnych typów, bo język na to nie pozwoli. Niezależnie czy są tego samego rozmiaru czy nie. Wskaźnik to zawsze integer o tym samym rozmiarze, więc jak się uprzesz, to możesz w dowolnym kontenerze trzymać wskaźniki na cokolwiek chcesz jednocześnie, ale jako void* (jednak rzadko się zdarza, zeby to miało sens..). Język pozwala na castowanie wskaźnika na klasy pochodne do wskaźnika na klasę bazową, więc możesz trzymać w jednym kontenerze przechowującym typ Base*, typy Derivative1*, Derivative2*, (...).
czy jeżeli w jednej klasie mamy zdefiniowany konstruktor oraz operator() i mają takie same argumenty to będą się one wykonywały analogicznie jak w przypadku konstruktora kopiującego i operatora= ; to znaczy przy inicjalizacji wykona się konstruktor a w każdym innym przypadku operator() ?
Jeśli przy tworzeniu obiektu podasz w nawiasach argumenty, to oczywiście będzie to zrozumiane jako konstruktor. Kiedy obiekt już istnieje (jest jakiś kontekst dla operatora () ), to możesz zawołać operator. Nawet tak:
struct Test
{
Test(int a) { ++a; }
int operator()(int a) { return ++a; }
};
int main()
{
Test(5)(4);
}