1.6 Namespace

C++ dilinde namespace (ad alanı) anahtar kelimesi, kodunuzu mantıksal gruplara ayırmak ve isim çakışmalarını önlemek için kullanılır. Özellikle büyük projelerde, farklı kütüphaneler veya modüller tarafından tanımlanan aynı isimlerin (örneğin, sınıf, fonksiyon veya değişken isimleri) çakışmaması için namespace kullanımı önemlidir.

Bir namespace tanımlamak için aşağıdaki sözdizimini kullanabilirsiniz:

namespace ad_alanı_adı {
    // Burada tanımlanan her şey bu ad alanına ait olur.
    int x = 10;

    void yazdir() {
        std::cout << "x: " << x << std::endl;
    }
}

Bu örnekte ad_alanı_adı adında bir namespace tanımladık ve içine bir değişken (x) ve bir fonksiyon (yazdir()) koyduk.

Tanımlanan bir namespace içindeki elemanlara erişmek için namespace adını kullanmanız gerekir:

#include <iostream>

namespace ornek {
    int x = 100;

    void yazdir() {
        std::cout << "Namespace içindeki x: " << x << std::endl;
    }
}

int main() {
    ornek::yazdir();  // Namespace içindeki fonksiyona erişim
    std::cout << "Namespace içindeki x: " << ornek::x << std::endl; // Namespace içindeki değişkene erişim

    return 0;
}

using Anahtar Kelimesi

Bir namespace içindeki elemanları kullanırken her seferinde namespace adını yazmak zorunda kalmamak için usinganahtar kelimesini kullanabilirsiniz:

#include <iostream>

namespace ornek {
    int x = 100;
    void yazdir() {
        std::cout << "Namespace içindeki x: " << x << std::endl;
    }
}

int main() {
    using namespace ornek;  // ornek namespace içindeki tüm elemanları kullanıma aç

    yazdir();  // ornek::yazdir() olarak kullanılabilir
    std::cout << "Namespace içindeki x: " << x << std::endl; // ornek::x olarak kullanılabilir

    return 0;
}

Bu örnekte using namespace ornek; ifadesi, ornek ad alanındaki tüm elemanları main fonksiyonunda kullanılabilir hale getirir.

Ad Alanları ile İsim Çakışmalarını Önleme

Farklı namespace içinde aynı isimde değişken veya fonksiyonlar tanımlanabilir ve bunlar birbirinden bağımsız çalışır. Örneğin:

#include <iostream>

namespace birinciAlan {
    int x = 5;
}

namespace ikinciAlan {
    int x = 10;
}

int main() {
    std::cout << "birinciAlan içindeki x: " << birinciAlan::x << std::endl;
    std::cout << "ikinciAlan içindeki x: " << ikinciAlan::x << std::endl;

    return 0;
}

Çıktı:

birinciAlan içindeki x: 5
ikinciAlan içindeki x: 10

Bu örnekte, birinciAlan ve ikinciAlan ad alanlarında aynı isimde (x) değişkenler tanımlanmış olsa da, isim çakışması oluşmaz ve her iki namespace'deki x değişkeni bağımsız olarak kullanılır.

İç İçe namespace Tanımlama

namespace içinde başka bir namespace tanımlayabilirsiniz. Bu, daha karmaşık ve detaylı isimlendirme sistemleri kurmak için kullanışlıdır:

#include <iostream>

namespace birinciAlan {
    namespace ikinciAlan {
        int x = 20;

        void yazdir() {
            std::cout << "İç içe namespace içindeki x: " << x << std::endl;
        }
    }
}

int main() {
    birinciAlan::ikinciAlan::yazdir();
    std::cout << "İç içe namespace içindeki x: " << birinciAlan::ikinciAlan::x << std::endl;

    return 0;
}

Çıktı:

İç içe namespace içindeki x: 20
İç içe namespace içindeki x: 20

namespace Alias (Takma Ad)

namespace adlarını kısaltmak için takma adlar kullanabilirsiniz:

#include <iostream>

namespace birinciAlan {
    int x = 100;
}

namespace kisaAd = birinciAlan;  // birinciAlan için kisaAd takma adını kullan

int main() {
    std::cout << "Takma ad kullanımı: " << kisaAd::x << std::endl; // kisaAd ile birinciAlan içindeki x'e erişim

    return 0;
}

Çıktı:

Takma ad kullanımı: 100

Last updated