2 تا کد بالا که کلا متفاوتن اگر شما منظروتون همچین چیزیه :
c1.func()
c1.func(0)
c2.func()
c2.func(0)
که شاید در ظاهر مشابه باشن ولی در باطن فرق می کنن
اصولا شما وقتی از overload استفاده میکنی که 2 تا فانکشن با ورودی های متفاوت از نظر پیاده سازی هم متفاوت باشن یعنی مفهوم 2 شی متفاوت که از یک کلاس واحد مشتق گرفتن رو هم ازش میشه برداشت کرد
ولی default initialization صرفا یک تابع است با یک پیاده سازی واحد برای ورودی های متفاوت . یعنی بیشتربرای استفاده ساده تر از یک تابع هست و کاملا با overload از نظر مفهوم فرق می کنه