Aracılığıyla paylaş


Bildirimler ve tanımlar (C++)

C++ programı değişkenler, işlevler, türler ve ad alanları gibi çeşitli varlıklardan oluşur. Bu varlıkların her biri kullanılmadan önce bildirilmelidir. Bildirim, varlığın türü ve diğer özellikleri hakkında bilgilerle birlikte benzersiz bir ad belirtir. C++ dilinde bir adın bildirildiği nokta, derleyici tarafından görünür hale geldiği noktadır. Derleme biriminin sonraki bir noktasında bildirilen bir işleve veya sınıfa başvuramazsınız. Değişkenler, kullanıldıkları noktadan önce mümkün olduğunca yakın olarak bildirilmelidir.

Aşağıdaki örnekte bazı bildirimler gösterilmektedir:

#include <string>

int f(int i); // forward declaration

int main()
{
    const double pi = 3.14; //OK
    int i = f(2); //OK. f is forward-declared
    C obj; // error! C not yet declared.
    std::string str; // OK std::string is declared in <string> header
    j = 0; // error! No type specified.
    auto k = 0; // OK. type inferred as int by compiler.
}

int f(int i)
{
    return i + 42;
}

namespace N {
   class C{/*...*/};
}

5. satırda main işlev bildirilir. 7. satırda adlı pi bir const değişken bildirilir ve başlatılır. 8. satırda, işlevi ftarafından üretilen değerle bir tamsayı i bildirilir ve başlatılır. 3. satırdaki iletme bildirimi nedeniyle ad f derleyici tarafından görülebilir.

9. satırda türü C adlı obj bir değişken bildirilir. Ancak bu bildirim, programın ilerleyen bölümlerinde bildirilmesine ve ileriye doğru bildirilmesine neden olmadığından bir hata C oluşturur. Hatayı düzeltmek için, önce main tanımının C tamamını taşıyabilir veya bunun için bir iletme bildirimi ekleyebilirsiniz. Bu davranış C# gibi diğer dillerden farklıdır. Bu dillerde, işlevler ve sınıflar bir kaynak dosyada bildirim noktasından önce kullanılabilir.

10. satırda, türünde std::string adlı str bir değişken bildirilir. Ad std::string , 1. satırdaki stringkaynak dosyayla birleştirilen üst bilgi dosyasında sunulduğundan görünür. std , sınıfın string bildirildiği ad alanıdır.

11. satırda ad j bildirilmemiş olduğundan bir hata oluşur. Bildirimin JavaScript gibi diğer dillerden farklı olarak bir tür sağlaması gerekir. 12. satırda, auto derleyiciye başlatıldığı değere göre türünü k çıkarsamalarını söyleyen anahtar sözcüğü kullanılır. Bu durumda derleyici türü için seçer int .

Bildirim kapsamı

Bir bildirim tarafından tanıtılan ad, bildirimin gerçekleştiği kapsam içinde geçerlidir. Önceki örnekte, işlevin içinde main bildirilen değişkenler yerel değişkenlerdir. Genel kapsamda main dışında adlı i başka bir değişken bildirebilirsiniz ve ayrı bir varlık olur. Ancak, adların bu şekilde çoğaltılması programcı karışıklığına ve hatalarına yol açabilir ve bundan kaçınılmalıdır. 21. satırda sınıfı C ad alanı Nkapsamında bildirilir. Ad alanlarının kullanılması ad çakışmalarını önlemeye yardımcı olur. C++ Standart Kitaplığı adlarının çoğu ad alanı std içinde bildirilir. Kapsam kurallarının bildirimlerle nasıl etkileşimde olduğu hakkında daha fazla bilgi için bkz . Kapsam.

Tanımlar

İşlevler, sınıflar, sabitler ve sabit değişkenler de dahil olmak üzere bazı varlıklar da tanımlanmalıdır. Tanım, derleyiciye, varlık daha sonra programda kullanıldığında makine kodu oluşturmak için gereken tüm bilgileri sağlar. Önceki örnekte, 3. satır işlev f için bir bildirim içerir, ancak işlevin tanımı 15 ile 18 arasında satırlarda sağlanır. 21. satırda, sınıf C hem bildirilir hem de tanımlanır (tanımlandığı gibi sınıf hiçbir şey yapmaz). Sabit değişken, başka bir deyişle, bildirildiği deyimde bir değer atanmalıdır. gibi int yerleşik bir türün bildirimi, derleyici bunun için ne kadar alan ayrılacaklarını bildiği için otomatik olarak bir tanımdır.

Aşağıdaki örnek, aynı zamanda tanım olan bildirimleri gösterir:

// Declare and define int variables i and j.
int i;
int j = 10;

// Declare enumeration suits.
enum suits { Spades = 1, Clubs, Hearts, Diamonds };

// Declare class CheckBox.
class CheckBox : public Control
{
public:
    Boolean IsChecked();
    virtual int     ChangeState() = 0;
};

Tanım olmayan bazı bildirimler şunlardır:

extern int i;
char *strchr( const char *Str, const char Target );

Typedefs ve using deyimleri

C++'ın eski sürümlerinde anahtar sözcüğü, typedef başka bir ad için diğer ad olan yeni bir ad bildirmek için kullanılır. Örneğin, türü std::string için std::basic_string<char>başka bir addır. Programcıların gerçek adı değil typedef adını neden kullandığı açık olmalıdır. Modern C++ using dilinde anahtar sözcük yerine typedeftercih edilir, ancak fikir aynıdır: varlık için yeni bir ad bildirilir ve bu ad zaten bildirilir ve tanımlanır.

Statik sınıf üyeleri

Statik sınıf veri üyeleri, sınıfın tüm nesneleri tarafından paylaşılan ayrık değişkenlerdir. Paylaşıldıkları için sınıf tanımının dışında tanımlanmaları ve başlatılmaları gerekir. Daha fazla bilgi için bkz . Sınıflar.

extern bildirimleri

C++ programı birden fazla derleme birimi içerebilir. Ayrı bir derleme biriminde tanımlanan bir varlığı bildirmek için anahtar sözcüğünü extern kullanın. Bildirimdeki bilgiler derleyici için yeterlidir. Ancak, varlığın tanımı bağlama adımında bulunamazsa, bağlayıcı bir hata oluşturur.

Bu bölümde

Depolama sınıfları
const
constexpr
extern
Başlatıcılar
Diğer adlar ve tür tanımları
using Bildirim
volatile
decltype
C++ içindeki öznitelikler

Ayrıca bkz.

Temel Kavramlar