can a constructor be virtual