Kabul edilen cevap, bunu sanal özel işlevler için açıklar , ancak bu OP'nin sorduğundan çok daha sınırlı olan sorunun sadece belirli bir yönünü yanıtlar. Bu yüzden, yeniden ifade etmemiz gerekiyor: Neden başlıklarda sanal olmayan özel işlevleri bildirmemiz gerekiyor ?
Başka bir cevap, sınıfların bir blokta bildirilmesi gerektiğini - bundan sonra mühürlendiklerini ve eklenemeyeceklerini ortaya koymaktadır. Başlıkta özel bir yöntem bildirmeyi ve ardından başka bir yerde tanımlamaya çalışarak bunu yapardınız. Güzel nokta. Sınıfın bazı kullanıcıları neden diğer kullanıcıların gözlemleyemeyeceği şekilde genişletebilir? Özel yöntemler bunun bir parçasıdır ve bundan hariç tutulmaz. Ama sonra neden dahil edildiğini soruyorsunuz ve bu biraz totolojik görünüyor. Sınıf kullanıcıları neden bunları bilmeli? Görünmüyorlarsa kullanıcılar ekleyemediler ve hey presto.
Bu nedenle, varsayılan olarak özel yöntemleri dahil etmek yerine, kullanıcılara görünür olmalarını sağlamak için belirli noktalar sağlayan bir cevap vermek istedim. Kamu beyanı gerektiren sanal olmayan özel fonksiyonların mekanik bir nedeni, Herb Sutter'in Mantık # 100 hakkında gerekçesinin bir parçası olarak GotW # 100'de verilmiştir . Burada Pimpl hakkında konuşmayacağım, çünkü eminim hepimiz biliyoruz. Ama işte ilgili bit:
Üstbilgi dosyası sınıfı tanımındaki herhangi bir şey değiştiğinde C ++ 'da, sınıftaki kullanıcıların erişemediği özel sınıf üyelerinde tek değişiklik olsa bile, bu sınıfın tüm kullanıcıları yeniden derlenmelidir. Bunun nedeni, C ++ 'ın derleme modelinin metin içerme üzerine kurulu olması ve C ++' ın arayanların özel üyelerden etkilenebilecek bir sınıf hakkında iki ana şey bildiğini varsaymasıdır:
- Boyut ve Düzen : [üyeler ve sanal işlevler - açıklayıcı ve performans için harika, ama neden burada olduğumuzu değil]
- İşlevler : Arama kodu, özel olmayan işlevlerle aşırı yüklenen erişilemeyen özel işlevler de dahil olmak üzere sınıfın üye işlevlerine yapılan çağrıları çözebilmelidir - özel işlev daha iyi eşleşiyorsa, arama kodu derlenemez. (C ++, güvenlik nedenleriyle erişilebilirlik kontrolünden önce aşırı yük çözünürlüğü gerçekleştirmek için kasıtlı tasarım kararı aldı. Örneğin, bir işlevin erişilebilirliğini özelden kamuya değiştirmenin yasal arama kodunun anlamını değiştirmemesi gerektiği hissedildi.)
Sutter, elbette, Komite üyesi olarak son derece güvenilir bir kaynaktır, bu yüzden birini gördüğünde "kasıtlı bir tasarım kararı" bilir. Değişmiş anlambilimden ya da yanlışlıkla kırılabilir erişilebilirlikten kaçınmanın bir yolu olarak özel yöntemlerin kamuya açıklanmasını zorunlu kılma fikri muhtemelen en ikna edici mantıktır. Neyse ki, her şey şimdiye kadar oldukça anlamsız göründüğü için!