üye fonksiyonları tüm statik olan sınıfın oluşması önlenmeli

oy
9

Benim sınıf ClassA tüm üye değişkenleri ve üye fonksiyonları statiktir.

tüm fonksiyonlar statik, çünkü Sınıf A, yerel değişken başvurulan asla, bu nedenle bu nesne asla başvurulmaz: Bir kullanıcı bu sınıfın bir nesne oluşturmak için (yanlışlıkla) çalışıyor, o bir uyarı alır. Yani, bu sınıfın bir nesnesi oluşturmaya çalışan kullanıcıyı engellemek istiyorum.

özel bir varsayılan (hayır değişkenleri) yapıcısı oluşturmak için yeterli olur mu? Veya (varsayılan Kurucular kullanarak önlemek için) Ayrıca özel kopya kurucu ve özel atama operatörü oluşturmak gerekiyor? Ben de bunları oluşturmak zorunda eğer, belki de sadece yerine bazı kukla saf sanal işlev oluşturmak için daha iyi olurdu ve bu nesneyi yaratmak engelleyecektir?

teşekkür ederim

Oluştur 09/12/2008 saat 18:17
kaynak kullanıcı
Diğer dillerde...                            


5 cevaplar

oy
20

Bunun yerine tüm statik yöntemlerle bir sınıf kullanmak yerine, ayaklı ayrı ad alanında işlevleri verme yöntemleri daha iyi olabilir. Çağrı sözdizimi aynıdır:

namespace::function() yerine classname::function()

ve size sınıf örneğini çalışırken biriyle uğraşmak gerekmez.

Cevap 09/12/2008 saat 18:28
kaynak kullanıcı

oy
11

Özel varsayılan kurucu oluşturma yeterli olmalıdır. diğer varsayılan yapılara (kopya yapıcı ve atama) Her ikisi de bir örneği düzgün çalışmak zorunda güveniyor. Hiçbir varsayılan yapıcı yoksa o zaman, aslında kopya inşaat bölümünü almak için dolayısıyla hiçbir şekilde bir örneğini oluşturmak için bir yolu yoktur.

olarak özel ve uygulamadık.BREAK_LINE_BEGINBREAK_LINE_END tüm 3 tanımlamak olsa Muhtemelen bir kaç baş ağrısı kaydetmek istiyorum.

Cevap 09/12/2008 saat 18:19
kaynak kullanıcı

oy
10

Diğerleri de söylediğim gibi, bir ad kullanmanız gereken budur. Eğer, Sınıfınızla kalmak özel yapıcı olan bir sınıf oluşturmak ve ondan türetmek istiyorsanız, sizin niyetiniz bariz hale getirmek için:

class NonConstructible { 
    NonConstructible();
};

class SuperUtils: NonConstructible {
    static void foo();
    // ...
    static std::vector<int> globalIDs;
    // ...
};

Tamam, şimdi tek ve bunu yapmanın tek yoludur ad içine bakalım:

namespace SuperUtils {
    void foo() {
        // ....
    }

    std::vector<int> globalIDs;
};

Sen kullanarak bu çağırabilir SuperUtils::foo();her iki durumda da, ancak ad bir kapsamda size kullanmadan onları referans böylece, geçerli kapsamı içine belirli veya tüm üyeleri getirmek için ad alanı beyanı ve direktifini kullanabilirsiniz avantajı vardır SuperUtils:::

void superFunction() {
    using namespace SuperUtils;
    foo();
}

genellikle o kaçınılmalıdır iken yöntemi, daha sonra kodun okunabilirliği artırmak SuperUtils, münhasıran kadar eşya kullanırken, bu yararlı olabilir.

Cevap 09/12/2008 saat 18:54
kaynak kullanıcı

oy
3

Bir kopya kurucu kullanmak için kopyalamak bir nesne olması gerekir, bu nedenle varsayılan kurucuyu kilitli verdiyseniz güvenli olmalıdır.

Cevap 09/12/2008 saat 18:20
kaynak kullanıcı

oy
0

olmayan yığın nesnelerinin oluşturulmasını önlemenin en iyi yolu yıkıcı gizli yapmayı sağlamaktır. Sonra kapsam dışına gider ve onu şikayet ne zaman nesne imha edebilirsiniz hiçbir şekilde derleyici yoktur. Bu ancak yeni yapmasını engelleyebilirsiniz olmayacaktır.

Cevap 10/12/2008 saat 09:35
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more